匿名函数 VS 经典函数

问题描述 投票:0回答:2

我无法弄清楚这种行为的原因,任何人都可以帮助我理解

  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

javascript node.js function closures
2个回答
0
投票

在第一个示例中,闭包创建一次并重复使用,因此状态(计数)在调用之间保持不变。

在第二个示例中,每次调用increment() 时都会创建一个新的闭包(因此会创建一个新的计数变量),因此状态不会在循环迭代中共享。


0
投票

是因为 let counter 是用 count = 1 的函数预先初始化的吗?但在另一种情况下,由于每次调用该函数,它都会将计数重置为 0

© www.soinside.com 2019 - 2024. All rights reserved.