【发布时间】:2018-02-12 02:01:19
【问题描述】:
我正在努力深入了解闭包,但我正在努力研究它的机制。我看过 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)) 真的很有帮助。
【问题讨论】:
标签: javascript closures