【发布时间】:2017-12-23 08:14:28
【问题描述】:
我对在 Javascript 中使用闭包和自我撤销感到困惑。当我运行此代码时,每次单击按钮时,计数器都会增加 1。分配给“添加”的函数似乎是自调用函数。
<!DOCTYPE html>
<html>
<body>
<button type="button" onclick="myFunction()">Count!</button>
<p id="demo">0</p>
<script>
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();
function myFunction(){
document.getElementById("demo").innerHTML = add();
}
</script>
</body>
</html>
但是,当我像下面的代码那样调用函数时,计数器值始终为 1。
<!DOCTYPE html>
<html>
<body>
<button type="button" onclick="myFunction()">Count!</button>
<p id="demo">0</p>
<script>
var add = function () {
var counter = 0;
return function () {return counter += 1;}
};
function myFunction(){
var temp = add();
document.getElementById("demo").innerHTML = temp();
}
</script>
</body>
</html>
谁能告诉我这两个示例之间的区别,以及引擎盖下的内容?谢谢你的帮助。
【问题讨论】:
-
在您调用方法 add() 时在第二个代码中。计数器正在重置为零。因为 var counter = 0;因此总是 1
-
你应该阅读闭包。你会得到答案。这都与变量范围有关。 stackoverflow.com/questions/36636/what-is-a-closure
-
看来是我的错。第二个应该是:
0
var add = function () { var counter = 0; return function () {return counter += 1;} }; var temp = add();函数 myFunction(){ document.getElementById("demo").innerHTML = temp(); }
标签: javascript closures