gpt4 book ai didi

javascript - 在闭包中,为什么每次调用 main 变量都不会重置?

转载 作者:行者123 更新时间:2023-11-30 14:47:07 26 4
gpt4 key购买 nike

我正试图对闭包有一个透彻的理解,但我正在为它的机制而苦苦挣扎。我看过 w3schools ( https://www.w3schools.com/js/js_function_closures.asp ) 和 MDN ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures ) 和其他一些地方。我了解闭包是什么以及如何使其工作,但我不明白为什么在第一次调用外部函数后的后续调用似乎直接进入内部函数。

这是我的代码 - 一个简单的工作闭包:

  var add = (function () {
var a = 0;

alert('hi');

function addInner(){
a += 1;
return a;
}
return addInner;
})();

function getAdd() {
document.getElementById("test").innerHTML = add();
}

我有两个问题可能都有相同的答案:为什么每次调用 add()a 都不会重置?为什么除了第一次之外不会弹出警报?我将 getAdd() 附加到一个按钮,效果很好,但它不会在第一次弹出警报时弹出。为什么要这样做?

编辑:我还发现这个问题的第一个答案 ( Why Don't Variables Reset in a Closure (Javascript)) 非常有帮助。

最佳答案

add 是对 addInner 的引用,而不是匿名“outer”函数,因为“outer”函数返回 addInner。然后,您调用该匿名函数一次 - 最后一组 () - 并将生成的函数及其自己的私有(private)“a”存储在 add 中。

假设外部函数是一个名为constructAdder 的命名函数,而您调用了

var add = constructAdder();
var add2 = constructAdder();

这基本上就是您所做的,但是使用了一个匿名函数,如果这样更清楚的话。由于闭包的魔力,您有一个外部函数构造一个可以计数的内部函数。

关于javascript - 在闭包中,为什么每次调用 main 变量都不会重置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48738590/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com