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