JS的for循環包裹異步函數的問題


有個循環,循環一個異步回調,為啥回調引用的循環值都是最后一步循環的循環值?然后,又有些時候無論什么循環值都得不到?

1 var arr = [1,3,5,7,9];
2 var arrLength = arr.length;
3 
4 for (var i = 0; i < arrLength; i++) {
5     setTimeout(function() {
6         console.log(i);
7         console.log(arr[i]);
8     }, 2000);
9 }

結果是:

5
undefined
5
undefined
5
undefined
5
undefined
5
undefined

解決方法:使用自執行函數傳參

 1 var arr = [1,3,5,7,9];
 2 var arrLength = arr.length;
 3 
 4 for (var i = 0; i < arrLength; i++) {
 5     (function(i) {
 6         setTimeout(function() {
 7             console.log('i是' + i);
 8             console.log('value是' + arr[i]);
 9         }, 2000);
10     })(i);
11 }

結果是:

i是0
value是1
i是1
value是3
i是2
value是5
i是3
value是7
i是4
value是9

參考鏈接:

https://www.jianshu.com/p/690f58a3ff7b


免責聲明!

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



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