關於settimeout 和for循環

for(var i=0;i<3;i++){
setTimeOut(function(){
console.log(i)
},500)
};
執行結果:3,3,3
----------------------------
JS是單線程的,意味着同一時間只能執行一條語句,因此每一個JS執行代碼塊都會阻塞異步事件的執行,這就意味着當一個異步(鼠標點擊事件,ajax,settimeout)發生的時候,他們將排在執行隊列的最後等待執行.
 
因此解決方法是 寫一個當即執行的匿名函數用來避免出現被for阻塞的狀況:
當即執行的匿名函數寫法:
(function (i){})(i);
因此上述函數應該寫成:
for(var i=0;i<3;i++){
(function(i){
setTimeOut(function(){
console.log(i)
},500);
})(i);
}
相關文章
相關標籤/搜索