#每天一个知识点#
闭包
红宝书对闭包的定义:闭包是指引用了另一函数作用域变量中的函数,通常是在嵌套函数中实现的。从这个定义可知闭包其实是一个函数。
我认为闭包就是函数执行产生一些私有的上下文,首先这里面的变量被保护起来,不受外界的干扰。如果其他函数的作用域中也引用了这个变量,虽然这个函数执行完成之后它的作用域就会被回收,但是为了销毁了父作用域不能影响子函数,所有要创建一个对象,把子函数内引用的父作用域的变量打包起来,形成了一种保存的效果,也就是闭包。
闭包可以应用于私有化数据,在私有化数据的基础上保持数据,还可以用作防抖和节流。通过闭包来保存定时器。
如果闭包使用不正确,会很容易造成内存泄漏的。通常,如果引用闭包的函数是一个全局变量,那么闭包会一直存在直到页面关闭;但如果这个闭包以后不再使用的话,就会造成内存泄漏。
如果引用闭包的函数是个局部变量,等函数销毁后,在下次 JavaScript 引擎执行垃圾回收时,判断闭包这块内容如果已经不再被使用了,那么JavaScript 引擎的垃圾回收器就会回收这块内存。
展开
评论