1
我想了解範圍如何在JS中工作。你能告訴我,如果我有這個塊的代碼的理解是否正確:瞭解JavaScript範圍
for(var i = 0; i<5; i++){
setTimeout(function timeoutHandler() {
var i = i;
console.log(i); //undefined
})
}
console.log
打印undefined
5倍。據我瞭解,當執行timeoutHandler
時,它有自己的本地範圍和自己的i
變量。那麼,在執行timeoutHandler
時,解釋器是否要求變量i
,是否在本地作用域中聲明並使用此聲明的變量進行賦值?這解釋了爲什麼它是undefined
,但我不確定我是否完全正確。 感謝
UPD 我並不需要此代碼才能正常工作,我只是想知道爲什麼它的行爲一樣,在這種情況下
'變種I = i'的setTimeout的回調處理器中的'i'創建一個新的範圍和'i'尚未分配給它之前還沒有定義爲'再次i'。因此'我'是'未定義的'。 – gurvinder372
首先'var i = i'沒有意義。 – evolutionxbox
'var i = i'等同於'var i;我=我;'。 – JJJ