JavaScript程式碼預解析規則
阿新 • • 發佈:2021-10-08
JavaScript程式碼是由瀏覽器中的JavaScript解析器來執行的,JavaScript解析器在執行JavaScript程式碼的時候會進行預解析,也就是提前對程式碼中的var變數宣告和function函式宣告進行解析,然後再去執行其他的程式碼。
為了方便大家更好地理解,下面我們通過一段簡單的程式碼來演示var 關鍵字的預解析效果。
// 以下程式碼中的var num變數宣告會進行預解析 console.log(num); //輸出結果: undefined var num = 10; // 以下程式碼由於不存在 var num2, 所以會報錯 console.log(num2); //報錯,提示num2 is not defined(num2未定義)
在上述程式碼中,第2行在變數num宣告前就訪問了變數num,但卻沒有像第5行的num2一樣報錯,這是因為第3行程式碼中的var num會被預解析,相當於如下程式碼。
var num; // num的變數宣告由於預解析而提升到前面 console.log(num); //輸出結果: undefined num = 10;
由此可見,由於num的變數宣告被預解析,所以console.log(num)不會報錯,並且由於賦值操作num = 10不會被預解析,所以此時num的值為undefined。
同樣,JavaScript 中的函式也具有預解析的效果,示例程式碼如下。
fn(); function fn(){ console.log('fn'); }
在上述程式碼中,fn()函式呼叫的程式碼寫在了函式宣告的前面,但函式仍然可以正確呼叫,這是因為function函式宣告操作也會被預解析。
需要注意的是,函式表示式不會被預解析,示例程式碼如下。
fun(); //報錯,提示fun is not a function( fun不是一個函式) var fun = function() { console.log('fn'); }
上述程式碼提示fun不是一個函式, 這是因為var fun變數宣告會被預解析,預解析後,fun的值為undefined,此時的fun還不是一個函式, 所以無法呼叫。只有第2~ 4行程式碼執行後,才可以通過fun()來呼叫函式。
本文轉自:黑馬程式設計師web前端課程 http://web.itheima.com