簡體   English   中英

For循環行為中的Javascript setTimeOut

[英]Javascript setTimeOut in For Loop Behaviour

我對javascript解釋器為什么以及如何輸出以下內容感到好奇

5
5
5
5
5

運行此代碼時:

for(var i=0;i<5;i++){
setTimeout(function(){console.log(i);},200);  
};

誰能提供詳盡的解釋?

這與年表有關。

請記住,超時是一個延遲的同步操作,因此在其運行之前,它查詢i並發現其值為5。這是因為(同步)循環的最后一個動作是將其值設置為5:達到4(循環的最后一次迭代),然后i++達到5。

如果要輸出0-4但保留超時,則需要在創建超時時捕獲i的當前迭代值。 您可以通過將其傳遞給立即執行的函數來做到這一點:

for(var i=0;i<5;i++)
    setTimeout((function(i) { return function(){ console.log(i); }; })(i),200);

我認為這有助於在原始示例中看到變量i的最接近范圍(在log內部調用時)是全局范圍。到5,直到記錄下來。

暫無
暫無

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

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