闭包中的JavaScript变量值

时间:2016-11-04 05:57:38

标签: javascript

我找到了一个javascript示例,我需要一个解释:

<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>

我不明白为什么每次按下按钮时var计数器的值都会增加,而在本教程的其他地方我读到:&#34; JavaScript变量的生命周期在声明时开始。 功能完成后删除局部变量。&#34;

1 个答案:

答案 0 :(得分:0)

Javascripts变量范围是函数范围。

这种情况是关闭。

 var add = (function () {
  var counter = 0;
  return function () {
        return counter += 1;}
  }) ();
  function myFunction(){
             document.getElementById("demo").innerHTML = add();
  }

单击按钮时,您正在调用myFunction,它在内部调用add方法。

add方法在这里是一个IIFE,里面有函数。这种情况已经结束。内部函数可以访问外部函数变量,但反之不然。因此,当调用add方法时,可以跟踪变量'counter'状态。

希望这有帮助