闭包
一些其他概念
作用域链
以自己所在的环境为链的前端,链的下一对象为上层函数的变量对象,一直到全局变量域。所以全局变量域始终会在一个作用域链的结尾。
当寻找变量时,始终会沿着作用域链来查找,从链的前端开始,没有就在下一对象找,直到达到链尾。
垃圾回收机制
当一个函数执行完成后,会回收函数的内存空间,当一个变量没有任何指针指向时,也会被回收。
闭包概念
闭包:能够读取其他函数内部变量的函数
也就是定义在一个函数内部的函数,这个内部的函数持有外部函数变量的引用。
所以结合上面所说到的垃圾回收机制,闭包能防止外层函数的变量被回收。
闭包可以让你从内部函数访问外部函数作用域。在 JavaScript 中,每当函数被创建,就会在函数生成时生成闭包。 ———MDN
简单的闭包案例
function foo () {
var a = 1;
return function () {
console.log(a);
};
}
fn1 = foo();
fn1();
1
通过设置断点来观察闭包的产生