在javascript中,内部函数总是可以访问其所在外部函数中,声明的参数和变量,即使在其被返回(寿命终结)。
闭包是javascript中一个非常重要的特性,当前作用域总是能访问外部作用域中的变量。因为函数是javascript中唯一具有自身作用域的结构,因此闭包的创建依赖于函数。
1.访问函数内部的变量
2.防止函数内部的变量执行完城后,被销毁,使其一直保存在内存中。
每次调用其中一个计数器时,通过改变这个变量的值,会改变这个闭包的词法环境。然而在一个闭包内对变量的修改,不会影响到另外一个闭包中的变量。以这种方式使用闭包,提供了许多与面向对象编程相关的好处 —— 特别是数据隐藏和封装。
缺点:
如果不是某些特定任务需要使用闭包,在其它函数中创建函数是不明智的,因为闭包在处理速度和内存消耗方面对脚本性能具有负面影响。
闭包其实就是函数中的函数,当函数运行时被创建。当函数newLoad被执行时,Javascript引擎会创建一个newLoad函数执行上下文的作用域链(上下文的作用域链是由函数的作用域链来初始化的),这个作用域链包含了newLoad被执行时的活动对象(活动对象是在上下文被创建后创建的,它包含了函数运行期间的所有局部变量,参数及this等,此对象会被推入作用域链的前端,当运行期上下文被销毁,活动对象也随之销毁),同时引擎也会创建一个闭包,该闭包的作用域链也会引用newLoad的活动对象,当newLoad执行完时,虽然其执行上下文和活动对象都已经被释放,但是闭包还引用newLoad的活动对象
???
如果是get set函数,那么不会共享
refer to https://blog.csdn.net/lidatgb/article/details/7621744
网友评论