1. 常見的面試題代碼解釋
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
// 6 個(gè) 6
JS是單線程運(yùn)行的,setTimeout(code,millisec) setTimeout 是一個(gè)異步任務(wù),要在當(dāng)前code執(zhí)行完之后millisec才執(zhí)行自己。i為全局變量畸陡,值在for循環(huán)后最終會(huì)是 6
2. 代碼打印 0步清、1霍转、2鲁捏、3鹊汛、4朋凉、5 的方法
for(let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
因?yàn)?let 變量的作用域只在當(dāng)前函數(shù)中州丹,所以每次 for 循環(huán)都會(huì)生成一個(gè)新的 i,六次 for 循環(huán)結(jié)束之后侥啤,就會(huì)有 6 個(gè) i当叭,因此 setTimeout 會(huì)分別打印出這 6 個(gè) i
for(let i=0; i<6; i++){
console.log(i)
}
將 setTimeout 包裹在立即執(zhí)行函數(shù)中茬故,每次將 i 的值賦值給 j,并打印出 j 的值蚁鳖。