[标记为重复,但认为不是;它解决了相同的常见示例,但用户对此提出了不同的问题。]
我一直在阅读关于javascript的内容,但我对我发现的两个例子感到困惑。下面的链接来自我读过的stackoverflow文章之一,另一段代码来自javascript教程网站。
Stackoverflow:How do JavaScript closures work?(具体示例4)。
教程示例:
<p>Counting with a local variable.</p>
<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>
&#13;
在上面的代码片段中,一旦声明并设置counter=0
,就会调用自调用函数。然后按下按钮会触发add()
功能和计数器增量,即1 then 2 then 3..
。
我的问题是为什么?我知道return函数可以访问父作用域counter
,但是如果多次再次调用add()
函数,counter
不会多次重置为0
每次被叫?我相信&#39;词汇环境&#39;每个电话都是一样的。
在链接stackoverflow讨论的示例4中,再次调用该函数重新初始化变量,如我所料。这是否与var
用于声明函数有关?
还试着查看Mozilla文档,但它并没有涵盖这种情况:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures