關於settimeout的面試題

2022-07-16 13:03:14 字數 734 閱讀 7434

廢話不多說,先上**

1

for ( var i = 0;i<5; i++)

毫無疑問,結果為0,1,2,3,4

再看下面的情況

1

for( var i = 0;i<5;i++) ,1000)

5 }

此時,結果為5,5,5,5,5

for迴圈會先執行完(同步優先於非同步優先於**)

上面**中settimeout在for迴圈裡是非同步執行的,在延遲輸出的時候,i的值已經是5了,因此輸出5,5,5,5,5

若要實現每隔一秒輸出i,該怎麼改呢???

方法一:利用自執行匿名函式

1

for (var i = 0; i < 5; i++) ,1000);

6})(i);

7 }

這裡利用了自執行匿名函式,這樣console.log(i);中的i就儲存在每一次迴圈生成的自執行匿名函式中的作用域中了。

方法二:利用let

1

for (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 今天同學問到了這個為啥不能用迴圈呢,我給的解釋就是用迴圈沒有...