函數(shù)執(zhí)行時機不同凳忙,運行結(jié)果也不同?
?同步任務(wù):
上一件事情沒有完成,繼續(xù)處理上一件事情,只有上一件事情完成了只壳,才會做下一件事情 –> JS中大部分都是同步編程。
同步
????let a =1
????function fn(){console.log(a)}
????a=2
????fn()
按步驟執(zhí)行
????1 將聲明變量a并賦值為1
????2 聲明函數(shù)fn
????3 將2賦值給a
????4 執(zhí)行fn() 打印出a并結(jié)束?
?異步任務(wù):
規(guī)劃要做一件事情暑塑,但是不是當(dāng)前立馬去執(zhí)行這件事情吼句,需要等一定的時間,這樣的話事格,我們不會等著他執(zhí)行惕艳,而是繼續(xù)執(zhí)行下面的操作。
異步
????let a=1
????function fn(){ setTimeout(()=>{ console.log(a) },0) }
????fn()
????a=2
執(zhí)行步驟
????1 聲明變量a并賦值
????2 聲明函數(shù)fn (不看略過看下一步)
????3 并執(zhí)行fn() setTimeout為異步等待(跳到下一步)
????4 將a重新賦值=2
????5 所以步驟操作完了 然后來執(zhí)行setTimeout() 打印出a //2 結(jié)束
1 解釋為什么如下代碼會打印6個6
let i=0
for(i=0;i<6;i++){
? ? setTimeout(()=>{
? ? ????console.log(i)
????},0)????
}
答:個人理解=>? 在for循環(huán)中 先執(zhí)行for循環(huán)第一行i=0 滿足條件 執(zhí)行i<6 滿足條件執(zhí)行里面內(nèi)容(?里面內(nèi)容遇到setTimeout() 由于它是定時器 需要等待執(zhí)行"?即使設(shè)置它的值為0s驹愚,也是在for循環(huán)結(jié)束之后再執(zhí)行的"?)跳過serTimeout內(nèi)容繼續(xù)執(zhí)行i++ 滿足條件下一輪循環(huán)(后面循環(huán)遇到setTimeout同第一次一樣跳過先不執(zhí)行)直到i為6時 它不滿足i<6的條件 退出for循環(huán) 再來執(zhí)行setTimeout 執(zhí)行時它的值為6 所以它得到的結(jié)果為6個6远搪。
2 寫出讓上面代碼打印0 、1逢捺、2谁鳍、3、4劫瞳、5的方法
用let語法? (let為了滿足新人的幻想出的奇葩的復(fù)制語法)
for(let i=0;i<6;i++){
? ? setTimeout(()=>{? ? console.log(i)? // 1,2,3,4,5,6
????})
}
3 除了使用 for let配合,還有什么方法可以打印出0倘潜、1、2志于、3窍荧、4、5
for(var i=0;i<6;i++){
console.log(i)? 用var 不配合setTimeout使用也可以
}