js---立即执行函数及闭包

讲解透彻:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures

每个闭包都有它自己的词法环境,闭包内多个函数,共享一个环境,该共享环境创建于一个立即执行的匿名函数体内
、、、
var Counter = (function() {
var privateCounter = 0;
function changeBy(val) {
privateCounter += val;
}
return {
increment: function() {
changeBy(1);
},
decrement: function() {
changeBy(-1);
},
value: function() {
return privateCounter;
}
}
})();

console.log(Counter.value()); /* logs 0 /
Counter.increment();
Counter.increment();
console.log(Counter.value()); /
logs 2 /
Counter.decrement();
console.log(Counter.value()); /
logs 1 */
、、、
由上创建的两个计数器,请注意两个计数器 Counter1 和 Counter2 是如何维护它们各自的独立性的。每个闭包都是引用自己词法作用域内的变量 privateCounter ,每次调用其中一个计数器时,通过改变这个变量的值,会改变这个闭包的词法环境。然而在一个闭包内对变量的修改,不会影响到另外一个闭包中的变量。

你可能感兴趣的:(js---立即执行函数及闭包)