簡體   English   中英

無法在JavaScript中重置對象中的屬性

[英]Property in Object Not Being Reset in JavaScript

我正在看一個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永遠也不會重置。

僅當調用makeCounter時, i才設置為0 如該代碼所示,makeCounter僅被調用一次。

i不會每次更改,因為您沒有更新i是通過closures訪問的,因此第一個函數僅被調用一次

更新它就像這樣

 function makeCounter() { return function() { var i = 0; console.log( ++i ); }; } var counter = makeCounter(); counter(); //Output is 1. counter(); //Output is 1. 

您正在調用具有相同i變量的同一計數器,不應重置它,因為它將調用var i = 0; 只有在您實例化計數器時,它才會繼續調用++i來增加它,如果您想為其添加新值,請調用一個新計數器:

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...
var second = makeCounter();
second(); //Output is 1.

如果要重置計數器,則必須再次調用makeCounter(),因為它僅返回您使用計數器訪問的函數。 閉包的概念僅記住返回的函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM