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