變量聲明優(yōu)先級
使用var關(guān)鍵字和function關(guān)鍵字聲明的變量,會被JS的解釋器優(yōu)先解析執(zhí)行欢嘿,具有優(yōu)先級
使用var關(guān)鍵字聲明變量
1. 看代碼說話
// 在script中直接打印輸出變量a
console.log(a); // Uncaught ReferenceError: a is not defined
2. 看代碼說話
console.log(a); // 此處輸出 undefined
var a = 20; // 賦值操作
console.log(a); // 此處輸出 20
PS:如果兩道問題都OK屎鳍,請下一頁!答錯的小伙伴請看開眼毙石!
// 當(dāng)程序來執(zhí)行時廉沮,首先var關(guān)鍵字聲明變量優(yōu)先執(zhí)行,進(jìn)行變量聲明徐矩,卻沒有進(jìn)行賦值
console.log(a); // 變量a已經(jīng)聲明滞时,但是沒有賦值
var a = 20; // 此處變量a已經(jīng)進(jìn)行賦值操作了
console.log(a); // 20
使用function關(guān)鍵字聲明函數(shù)
function 關(guān)鍵字聲明的函數(shù)會被優(yōu)先執(zhí)行
1. 看代碼說話
// 輸出變量
var test = 10;
// 定義函數(shù)
function test () {
console.log('木木噠..')
}
// 調(diào)用函數(shù)
test();
// 以上代碼在執(zhí)行時會發(fā)生情況?
// 頁面顯示錯誤滤灯, test is not a function
PS: 小伙伴們坪稽,來開眼!
以上代碼執(zhí)行過程:
1. 執(zhí)行var test變量的聲明
2. function關(guān)鍵字聲明的函數(shù)生效鳞骤,此刻test是一個function
3. 順序執(zhí)行程序窒百,對test進(jìn)行賦值 test = 10, 類型變?yōu)?number
4. 當(dāng)調(diào)用test函數(shù)時,此刻test已經(jīng)是number類型了弟孟,所以發(fā)生錯誤