本節教學主要為大家詳細分析了 JS 中的變數提升和預解析機制,對此感興趣的朋友快來學習下吧。
JS變數提升
變數提升就好比 JavaScript 引擎用一個很小的程式碼起重機將所有 var 宣告和 function 函數宣告都舉起到所屬作用域(所謂作用域,指的是可存取變數和函數的區域)的最高處。
這句話的意思是:如果在函數體外定義函數或使用 var 宣告變數,則變數和函數的作用域會提升到整個程式碼的最高處,此時任何地方存取這個變數和呼叫這個函數都不會報錯;而在函數體內定義函數或使用 var 宣告變數,變數和函數的作用域則會被提升到整個函數的最高處,此時在函數體內任何地方存取這個變數和呼叫所定義的函數都不會報錯。
變數提升範例如下:
console.log("gv1=" + gv);//在宣告前存取變數
show();//在定義前呼叫函數
var gv = "JavaScript";
console.log("gv2=" + gv);
function show(){
console.log("lv1=" + lv);
var lv = "JScript";
console.log("lv2=" + lv);
}
在上述程式碼中,第一行程式碼以及 show 函數中的第一行程式碼分別在變數宣告前存取了 gv 和 lv 變數,第二行程式碼在函數定義前,呼叫了 show 函數。這是否有問題呢?將上述程式碼複製貼上到 Chrome 控制台上,執行後的結果如圖 1 所示。
圖 1:Chrome 瀏覽器控制台的執行結果