js闭包的理解

语言: CN / TW / HK

任何在函数中定义的变量,都可以认为是私有变量,因为不能在函数的外部访问这些变量 (变量的作用域)

1.当在函数内部定义了其他函数时,就创建了闭包。 闭包是一个函数,闭包会携带包含它的函数的作用域

例子:

当a函数执行完后里面的活动对象不会销毁,因为b函数还在引用a函数作用域上的活动对象。直到b函数销毁后,里面的活动对象才被销毁。

2.在后台执行环境中,闭包的作用域链包含着它自己的作用域、包含函数的作用域和全局作用域。

3.通常,函数的作用域及其所有变量都会在函数执行结束后被销毁。

但是,当函数返回了一个闭包时,这个函数的作用域将会一直在内存中保存到闭包不存在为止。

闭包的作用:

1.可以使用自执行函数与函数的结合全新的闭包作用域

2.生成全新的私有作用域,保护函数内的变量安全。使用闭包的私有作用域代替全局变量,防止全局污染(在封装js库的时候就有用到)

3.在es5可以隔离 for循环中的var i变量的作用域

4.在内存中维持一个变量。