為什么如下代碼會(huì)打印 6 個(gè) 6宝恶?
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
因?yàn)镴S是單線程運(yùn)行的肥惭。
setTimeout語(yǔ)句在循環(huán)結(jié)束時(shí)才會(huì)執(zhí)行跳纳,循環(huán)結(jié)束時(shí)i已經(jīng)變成了6叶撒,所以會(huì)打印出6個(gè)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);
}