var a = 1;
function a() {
console.log(3);
}
console.log(a); // 1
a(); // 報錯
var a;
function a() {
console.log(2);
}
console.log(a); // 打印函數體
a(); // 2
一:
預解析時,函數聲明創建的函數整體會提升到所在執行環境【作用域】的頂部,
函數表達式創建的函數,僅僅提升變量名到所在執行環境【作用域】的頂部。
二:
當函數聲明和變量聲明同時存在時,函數聲明的優先級更高;
當變量聲明但沒有賦值並且函數名和變量名一致時,此名稱仍指向函數;
當變量名賦值且函數名和變量名一致,此名稱指向變量,函數被取代,