console.log(a); //undefined console.log(show); //函數的定義 show(); //aaa123 var a = 1; function show(){ console.log("aaa123"); } console.log(a); //1 conso ...
console.log(a); //undefined
console.log(show); //函數的定義
show(); //aaa123
var a = 1;
function show(){
console.log("aaa123");
}
console.log(a); //1
console.log(show); //函數的定義
show(); //aaa123
解釋:這種情況下,變數聲明得到提升(初始化賦值沒有),函數的聲明和定義也都得到提升
console.log(a); //undefined
console.log(show); //undefined
show(); //報錯
if(1)
{
console.log(show); //函數的第二種定義
var a = 1;
function show(){
console.log("aaa123");
}
function show(){
console.log("bbb456");
}
}
console.log(a); //1
console.log(show); //函數的第二種定義
show(); //bbb456
解釋:這種情況下,變數聲明得到提升(初始化賦值沒有),函數的聲明得到提升,但是並沒有定義
因為函數的定義被放在了if語句中,js解釋器猜測該函數可能有多個定義,但現在並不確定,需要等程式運行到那裡才可以確定,
所以第一次輸出show,結果為undefined,
而在進入if語句之後,因為函數聲明和定義提升的緣故,馬上可以確定,所以儘管第二次輸出show在if語句塊的開頭,
但是依然可以正確的輸出show函數的定義
console.log(a); //undefined
console.log(show); //undefined
show(); //報錯
if(0)
{
var a = 1;
function show(){
console.log("aaa123");
}
function show(){
console.log("bbb456");
}
}
console.log(a); //undefined
console.log(show); //undefined
show(); //報錯
解釋:因為判斷條件為false,分支代碼未執行,變數沒有進行賦值操作,函數也沒有定義