闭包 - closure
闭包是函数和词法作用域产生的一种词法绑定的现象.函数对象的[[scope]]
属性,保存着该函数被定义的时候所能够直接访问的作用域对象。
一般需要满足条件: 1. 函数嵌套; 2. 访问所处作用域。
function foo() {
var a = 1,
b = 2;
return function first() {
debugger;
console.log(b);
return function logNum() {
debugger;
console.log(a); // a存在闭包内, b不存在没有被访问就被释放了
};
};
}
foo()();
作为对比:
var a = 10;
void (function () {
debugger;
console.log(a);
})();
闭包的应用
利用闭包的特性,可以模拟私有成员变量,处理事件回调,比如柯里化,bind 等等