關於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);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM