多次调用Javascript Closure函数

时间:2018-01-11 16:01:01

标签: javascript closures

[标记为重复,但认为不是;它解决了相同的常见示例,但用户对此提出了不同的问题。]

我一直在阅读关于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;
&#13;
&#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

0 个答案:

没有答案