廢話不多說,先上**
1for ( var i = 0;i<5; i++)
毫無疑問,結果為0,1,2,3,4
再看下面的情況
1for( var i = 0;i<5;i++) ,1000)
5 }
此時,結果為5,5,5,5,5
for迴圈會先執行完(同步優先於非同步優先於**)
上面**中settimeout在for迴圈裡是非同步執行的,在延遲輸出的時候,i的值已經是5了,因此輸出5,5,5,5,5
若要實現每隔一秒輸出i,該怎麼改呢???
方法一:利用自執行匿名函式
1for (var i = 0; i < 5; i++) ,1000);
6})(i);
7 }
這裡利用了自執行匿名函式,這樣console.log(i);中的i就儲存在每一次迴圈生成的自執行匿名函式中的作用域中了。
方法二:利用let
1for (let i = 0; i < 5; i++) ,1000);
5 }
es6中let宣告的變數具有塊級作用域,所以每次for迴圈,console.log(i);都引用for**作用域下的i,因為這樣被引用,所以for迴圈結束後,這些作用域在settimeout偽執行前都不會被釋放
關於setTimeout的最大延時上限
昨晚在微博上看到有人問這個問題,小試了一下,我得到的情況如下 執行環境是32位的windows sp3 ie8 math.pow 2,32 1 4294967295 chrome dev 11.0 ff4 safari 5 則為 math.pow 2,31 1 2147483647 opera 接近...
關於for迴圈與setTimeout的延遲
在for迴圈中使用settimeout時,想使其每個settimeout在上乙個settimeout的基礎上進行延時,使用傳入陣列方式設定時間時,發現實際是按照每次設定的settimeout的延時執行的,而不是相加,例 let time 4,3,5,1,2 for let i 0 i time.le...
js中關於setTimeOut()迴圈的問題
function stop function checktime i return i function fun2 week function starttime starttime 上面 執行起來是沒錯 若是這樣呢 while true 今天同學問到了這個為啥不能用迴圈呢,我給的解釋就是用迴圈沒有...