js闭包的理解

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

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

例子:

a函数内进行return 另一个b函数,被包含的b函数因为作用域链拿到了上级a函数作用域的私有变量,当在外部调用a函数并且执行a函数的返回值b函数时,也就能在外部顺利拿到了a函数中作用域的私有变量。

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

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

3.通常,函数的作用域及其所有变量都会在函数执行结束后被销毁。
但是,当函数返回了一个闭包时,这个函数的作用域将会一直在内存中保存到闭包不存在为止。

闭包的作用:

1.可以使用自执行函数与函数的结合全新的闭包作用域
2.生成全新的私有作用域,保护函数内的变量安全。使用闭包的私有作用域代替全局变量,防止全局污染(在封装js库的时候就有用到)
3.在es5可以隔离 for循环中的var i变量的作用域
4.在内存中维持一个变量。

你可能感兴趣的:(闭包,javascript,前端,面试)