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