直接上一段代碼解釋下聲明提前
alert(a)? ? ? ? ? // 彈出函數(shù)a
a();? ? ? ? ? ? ? // 彈出10, 因為函數(shù)定義全部都提升上去
var a=3;
function a(){
? ? alert(10)
}?
alert(a)? ? ? ? ? // 彈出的是3
a=6;? ? ? ? ? ? ?
a();? ? ? ? ? ? ? //報錯炒考,提示a不是函數(shù)
聲明提前:在js中盗温,用var聲明的變量或者函數(shù),都會被提升到作用域最前面,但只是聲明提前孤紧,賦值并不會提前。
牢記這一句話拒秘,然后我們整理下代碼:
// var變量和函數(shù)聲明提前号显,順序和代碼中的順序一致,但是賦值不提前躺酒。
var a;
function a(){
? ? alert(10)
}
alert(a)? ? ? ? ? // 彈出函數(shù)a押蚤,因為函數(shù)a將a覆蓋
a();? ? ? ? ? ? ? // 彈出10
a=3;?
alert(a)? ? ? ? ? // 彈出3
a=6;? ? ? ? ? ? ?
a();? ? ? ? ? ? ? //報錯,提示a不是函數(shù)
修改之后的代碼就是js聲明提前的實際執(zhí)行順序羹应。
用const揽碘、let聲明的變量,不會被提到作用域最前面园匹,所以提前用了就會報錯