我是js的新手,我正在尝试闭包。有些事我无法理解。 如果我写
var uniqueInteger = (function() { // Define and invoke
var counter = 0; // Private state of function below
return function() { return counter++; };
}());
我反复调用函数uniqueInteger()
我得到0,1,2,3等等。似乎在调用函数后counter
没有被销毁。它存储在哪里,因为它不是一个全局对象?
现在,如果我稍微更改代码并将uniqueInteger
定义为
var uniqueInteger = (function() { // Define and invoke
var counter = 0; // Private state of function below
return function() { return counter++; };
});
我反复拨打uniqueInteger()()
我获得的值是0.这怎么可能?
答案 0 :(得分:4)
它存储在哪里,因为它不是全局对象?
在闭包创建的范围内。
现在,如果我稍微更改代码......我获得的值始终为0.这怎么可能?
因为每次在第二块代码中调用var counter = 0;
时,都会重新运行表达式var counter = 0;
(您还创建一个新的作用域并返回一个新函数,您可以立即调用它,因为您有{{ 1}})。
在第一个代码块中,您运行该函数一次并将其返回值分配给()()
,因此将计数器设置为uniqueInteger
的表达式仅评估一次。