我正在看一个JavaScript练习,输出有些混乱。
在下面的代码中,每次调用“ counter”时,输出到控制台的“ i”的值都会增加,但是在构造函数中,“ i”在对象代码的开头重置为“ 0”,因此应真正返回“ 1”每次调用“计数器”。
为什么每次调用“计数器”时都不将“ i”重置为“ 0”?
提前致谢!:)
function makeCounter() {
var i = 0;
return function() {
console.log( ++i );
};
}
var counter = makeCounter();
counter(); //Output is 1.
counter(); //Output is 2.
counter(); //Output is 3...
最佳答案
请记住:呼叫counter()
不会呼叫makeCounter()
。它调用makeCounter返回的函数。因为返回的函数不会重置i
的值,所以i
永远不会重置。i
仅在调用makeCounter时设置为0
。如该代码所示,makeCounter仅被调用一次。