我无法弄清楚这种行为的原因,任何人都可以帮助我理解
let counter= (function (){
let count = 0;
return function() {
count+=1;
return count;
}
})()
for (let i = 0; i< 3; i++){
console.log(counter());
}
这会打印出
的输出 1
2
3
如以下代码
function increment() {
let count = 0;
return function() {
count+=1;
return count;
}
}
for (let i = 0; i< 3; i++){
console.log(increment()());
}
打印 1 1 1 1
在第一个示例中,闭包创建一次并重复使用,因此状态(计数)在调用之间保持不变。
在第二个示例中,每次调用increment() 时都会创建一个新的闭包(因此会创建一个新的计数变量),因此状态不会在循环迭代中共享。
是因为 let counter 是用 count = 1 的函数预先初始化的吗?但在另一种情况下,由于每次调用该函数,它都会将计数重置为 0