喵喵時(shí)光機(jī)
2018-11-20 13:19:58
1.沒弄懂js的執(zhí)行順序,執(zhí)行下面代碼,剛開始alert的時(shí)候,a還沒有聲明,不是應(yīng)該直接報(bào)錯(cuò)嗎?為什么先是顯示這個(gè)function,然后顯示10,顯示3,最后還報(bào)錯(cuò)了?不是一開始就應(yīng)該報(bào)錯(cuò)了嗎?alert(a)a();var a=3;function a(){alert(10)}alert(a)a=6;a()
1 回答

瀟湘沐
TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊
問了下同學(xué),知道了為什么會(huì)出現(xiàn)那樣的情況,首先要明白的概念
1.js中,變量聲明和函數(shù)聲明是會(huì)提前的,并且函數(shù)聲明會(huì)優(yōu)于變量聲明。所以,在聲明a之前alert(a),并不會(huì)報(bào)錯(cuò)。以及,第一個(gè)alert,出現(xiàn)的是a這個(gè)function,并不是變量a。
2.第二個(gè)alert,無需多言,只是執(zhí)行a這個(gè)函數(shù)。
3.第三個(gè)alert,結(jié)果是3,因?yàn)檫\(yùn)行到了這里之前,執(zhí)行了 var a=3;
。所以a變成了3。
4.最后報(bào)錯(cuò)是因?yàn)?,?zhí)行到a();a進(jìn)行了兩次賦值,第一次是var a=3;
,第二次是a=6;
,但是無論怎樣,a都不是函數(shù),所以報(bào)錯(cuò)了。
添加回答
舉報(bào)
0/150
提交
取消