朋友们,我在学习 JavaScript 时遇到了一个问题。
这是代码:
function makeCounter() {
var currentCount = 1;
return function() { // (**)
return currentCount++;
};
}
var counter = makeCounter(); // (*)
// каждый вызов увеличивает счётчик и возвращает результат
alert( counter() ); // 1
alert( counter() ); // 2
alert( counter() ); // 3
// создать другой счётчик, он будет независим от первого
var counter2 = makeCounter();
alert( counter2() ); // 1
计数器工作正常 - 调用 3 次 - 值为 3 并且有。但是为什么会这样呢?毕竟在函数中每次都赋值1,所以每次调用函数都必须返回1,至少在类C语言中是这样的。我会假设发生这种情况是因为变量被声明一次并且它变成了一种全局变量,并且在随后对该函数的访问中这一行被简单地跳过了......总的来说,我将不胜感激。
有一篇关于闭包的好文章:
在您的情况下,该函数
makeCounter返回一个具有某种“捕获”功能currentCount并因此导致实例执行的函数counter- 您正在递增计数器。创建时counter2,您创建了一个包含新计数器的新实例currentCount,因此它们是独立执行的。此外,您的问题已经有了答案:How JavaScript closures work