-
作用域
(受javascript链式作用域结构的影响,父级变量中无法访问到子级变量的值,为了解决这个问题,才使用的闭包。)闭包就是能够读取其他函数内部变量的函数。(在JS中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解为”定义在一个函数内部的函数”。无论是在事件中,for循环中,还是在函数自调用中,只要return出来,便有闭包的应用)。 -
弊端 :
闭包会把函数中变量的值保存下来,供其他函数使用,这些变量会一直保存在内存当中,这样占用大量的内存,使用不当很可能造成内存泄漏,故要及时清除,清楚方法有两种,一是标记清除,二便是引用计数清除。 -
使用场景 :
闭包的常用场景有一是函数作为返回值,二是函数作为参数来传递。不适用于返回闭包的函数是个特别大的函数,很多高级应用都要依靠闭包实现.
A. 使用闭包代替全局变量;-----------解决全局变量污染
B.函数外或在其他函数中访问某一函数内部的参数------
C.在函数执行之前为要执行的函数提供具体参数( 延迟执行)-------
下面情况hi延迟执行
setTimeOut
setInterval
Ajax callbacks
event handler[el.οnclick=func 、 el.attachEvent(“onclick”,func)]
- 好处 :
使用闭包的好处是不会污染全局环境,方便进行模块化开发,减少形参个数,延长了形参的生命周期,坏处就是不恰当使用会造成内存泄漏;