1
function makeCounter() {
var i = 0;
return function() {
console.log(++i);
};
}
var counter = makeCounter();
counter(); // logs: 1
counter(); // logs: 2
为什么第二次调用counter()的结果是'2'而不是'1'?为什么调用两次函数的结果不同?
我试图找出它的执行过程,所以我改写makeCounter():
function makeCounter() {
var i = 0;
console.log('outer');
return function() {
console.log('inner');
console.log(++i);
};
}
var counter = makeCounter();
counter();
counter();
和结果是:
outer
inner
1
inner
2
我能想到的是: 我是功能计数器的参数(),第一个计数器() ex已完成,i更改为'1'。所以第二个计数器()执行,我是'2'。
它被称为闭包变量 –
counter'的'所有的电话将参考i'的'同一个实例,当该值在更新'counter'将更新共享实例值 –
谢谢〜我可以理解什么是闭包,但这个例子中的变量'i'令我困惑。需要更多的学习和培训。谢谢〜 –