JavaScript闭包保存状态

时间:2015-07-03 20:50:57

标签: javascript closures

我正在阅读此代码和MDN关于闭包的文章:

function outer() {

    var reference = 0;

    return function() {
        reference += 1;
        return reference;
    }
}

var x = outer();
x();
x()
x()
console.dir( x() );

然而,令我感到困惑的是这段代码如何记住状态。出于某种原因,代码的作者决定命名变量reference。只有想到的是物理地址"在这种情况下的含义。

当我看到来自var x = ...的代码行时 我在想以下几点:

  1. 将匿名函数分配给变量x。在执行的这个时候,外部函数的reference变量是0,因此它在内部函数中
  2. 执行内部函数,将变量reference添加到1然后我松开轨道
  3. 从运行代码我可以看到,内部函数创建了一些类型的引用/指针,如果愿意的话,创建外部函数reference变量,每次执行闭包时都会更新。出于某种原因,reference变量的值在进一步执行时仍然存在,几乎就像php中的静态变量一样。这就是为什么MDN说关闭"记得"它的环境?

    任何一步一步的解释都会有所帮助。

0 个答案:

没有答案