[英]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.