講解透徹:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures
每個(gè)閉包都有它自己的詞法環(huán)境啤握,閉包內(nèi)多個(gè)函數(shù)晶框,共享一個(gè)環(huán)境排抬,該共享環(huán)境創(chuàng)建于一個(gè)立即執(zhí)行的匿名函數(shù)體內(nèi)
授段、、届搁、
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 */
窍育、、漱抓、
由上創(chuàng)建的兩個(gè)計(jì)數(shù)器,請(qǐng)注意兩個(gè)計(jì)數(shù)器 Counter1 和 Counter2 是如何維護(hù)它們各自的獨(dú)立性的乞娄。每個(gè)閉包都是引用自己詞法作用域內(nèi)的變量 privateCounter ,每次調(diào)用其中一個(gè)計(jì)數(shù)器時(shí)确镊,通過(guò)改變這個(gè)變量的值溶其,會(huì)改變這個(gè)閉包的詞法環(huán)境。然而在一個(gè)閉包內(nèi)對(duì)變量的修改瓶逃,不會(huì)影響到另外一個(gè)閉包中的變量廓块。