Ben*_*enM 4 javascript closures scope
在下面的代码中,有人可以向我解释为什么多次调用会counter导致i每次调用时增加的值?
我的理解是,正如我们专门设置的i = 0;那样makeCounter,每次makeCounter通过counter变量调用时,i应该重置为0.我无法理解为什么不是这种情况.
function makeCounter() {
// `i` is only accessible inside `makeCounter`.
var i = 0;
return function() {
console.log( ++i );
};
}
// Note that `counter` and `counter2` each have their own scoped `i`.
var counter = makeCounter();
counter(); // logs: 1
counter(); // logs: 2
Run Code Online (Sandbox Code Playgroud)
每次makeCounter都通过"counter"变量调用
那是错的.
你只打电话makeCounter() 一次 - 在var counter = makeCounter();.
counter是对返回函数的引用,它关闭i变量.
调用counter()将执行此返回的函数,就像任何其他函数一样.
如果你makeCounter()()多次写,你会发生你期望的行为.