JavaScript中的对象中没有重置的属性

时间:2018-01-22 10:32:58

标签: javascript

我正在查看JavaScript练习,输出结果有点令人困惑。

每次在下面的代码中'计数器'被称为' i'输出到控制台增加,但在构造函数' i'重置为' 0'在对象代码的开头,所以应该真正返回' 1'每次'反击'被称为。

为什么'我'没有被重置为' 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...

4 个答案:

答案 0 :(得分:4)

请注意:调用counter()不会调用makeCounter()。它调用makeCounter返回的函数。由于返回的函数不会重置i的值,i永远不会重置。

调用makeCounter时,

i仅设置为0。正如该代码所示,makeCounter只被调用一次。

答案 1 :(得分:4)

i每次都不会更改,因为您没有更新i是通过closures访问的,所以第一个函数只调用一次

更新它就像这样

function makeCounter() {

   return function() {
     var i = 0;
     console.log( ++i );
   };
}

var counter = makeCounter();
counter(); //Output is 1.
counter(); //Output is 1.

答案 2 :(得分:2)

您正在调用具有相同i变量的同一个计数器,它不应该被重置,因为它只会在您实例化计数器时调用var i = 0;然后它将继续调用{ {1}}要增加它,如果你想要新值,请调用一个新的计数器:

++i

答案 3 :(得分:0)

如果要重置计数器,则必须再次调用makeCounter(),因为它只返回您使用计数器访问的函数。闭包的概念只记得返回的函数。