我正在看一个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仅被调用一次。

09-19 23:21