為什么如下代碼會打印 6 個 6?
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
因為JS是單線程運行的。
setTimeout語句在循環(huán)結束時才會執(zhí)行,循環(huán)結束時i已經(jīng)變成了6,所以會打印出6個6
讓上面代碼打印 0、1、2、3、4、5 的方法:
- 使用 for let 配合
for(let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
- 利用函數(shù)作用域
let i = 0
for(i = 0; i < 6; i++ ){
(function (j) {
setTimeout(function () {
console.log(j);
}, 0);
})(i);
}