首頁 > web前端 > js教程 > js實作非同步循環實作程式碼_javascript技巧

js實作非同步循環實作程式碼_javascript技巧

WBOY
發布: 2016-05-16 15:15:27
原創
1355 人瀏覽過

問題
實現非同步循環時,你可能會遇到問題。

讓我們試著寫一個非同步方法,一次循環列印一次循環的索引值。

<script>
for(var i = 0; i < 5; i++){
setTimeout(function(){
document.writeln(i);document.writeln("<br />");
},1000);
}
</script>
登入後複製

如上程式的輸出為:

5
5
5
5
5

原因

每次時間結束(timeout)都指向原始的i,而並非它的拷貝。所以,for迴圈使i成長到5,之後timeout運行並呼叫了當前i的值(也就是5)。

解決方法

有幾個不同的方式可以拷貝i。最普通且常用方法是透過宣告函數來建立一個閉包,並將i傳給此函數。我們這裡使用了自呼叫函數。

運行程式碼

<script>
for(var i = 0; i < 5; i++){
(function(num){
setTimeout(function(){
document.writeln(num);document.writeln("<br />");
},1000);
})(i);
}
</script>
登入後複製

輸出

0
1
2
3
4

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板