我正在阅读此代码和MDN关于闭包的文章:
function outer() {
var reference = 0;
return function() {
reference += 1;
return reference;
}
}
var x = outer();
x();
x()
x()
console.dir( x() );
然而,令我感到困惑的是这段代码如何记住状态。出于某种原因,代码的作者决定命名变量reference
。只有想到的是物理地址"在这种情况下的含义。
当我看到来自var x = ...
的代码行时
我在想以下几点:
reference
变量是0,因此它在内部函数中reference
添加到1然后我松开轨道从运行代码我可以看到,内部函数创建了一些类型的引用/指针,如果愿意的话,创建外部函数reference
变量,每次执行闭包时都会更新。出于某种原因,reference
变量的值在进一步执行时仍然存在,几乎就像php中的静态变量一样。这就是为什么MDN说关闭"记得"它的环境?
任何一步一步的解释都会有所帮助。