闭包的一点理解

参考http://www.jianshu.com/p/21a16d44f150 和《你不知道的JavaScript》

在闭包之前,对作用域有了解:

1.JavaScript中只有全局作用域与函数作用域(try...catch中catch是块级作用域,eval我们平时开发中几乎不会用到它,这里不讨论)。

2.作用域在编译阶段确定规则,作用域链在执行阶段确定(作用域链,是由当前环境与上层环境的一系列变量对象组成,它保证了当前执行环境对符合访问权限的变量和函数的有序访问)。

对闭包的定义:
当函数可以记住并访问所在的词法作用域,就产生了闭包,即使函数是在当前作用域之外执行。

简单来说,假设函数A在函数B的内部进行定义了,并且当函数A在执行时,访问了函数B内部的变量对象,那么B就是一个闭包。

闭包的特点:
1.我们可以在其他的执行上下文中,访问到函数的内部变量。

2.闭包会组织垃圾回收。函数的执行上下文,在执行完毕之后,生命周期结束,那么该函数的执行上下文就会失去引用。其占用的内存空间很快就会被垃圾回收器释放。可是闭包的存在,会阻止这一过程。

3.在闭包中,能访问到的变量,仍然是作用域链上能够查询到的变量。也就是函数声明位置的作用域链,不是调用位置的。

你可能感兴趣的:(闭包的一点理解)