1.首先理解函數作用域
在JavaScript中,變數的定義並不是以程式碼區塊作為作用域的,而是以函數作用域的。也就是說,如果變數是在某個函數中定義的,那麼它在函數以外的地方是不可見的。而如果該變數是定義在if 或for這樣的程式碼區塊中,它在程式碼區塊之外是可見的。另外,在JavaScript中,術語“全域變數”指的是定義在所有函數之外的變量,與之相對的是“局部變數”,所指的是某個函數中的變數。其中,函數內的程式碼可以像存取自己的局部變數一樣存取全域變量,反之則不行。
2.變數提升
在JavaScript程式碼運作之前其實是有一個編譯階段的。編譯之後才是從上到下,一行一行解釋執行。變數提升就發生在編譯階段,它把變數和函數的宣告提升到作用域的頂端。 (編譯階段的工作之一就是將變數與其作用域進行關聯)。
所以對於程式碼var a =2;來說,編譯器看到的是兩行程式碼var a; a = 2;第一個語句是宣告語句,在編譯階段處理。第二個語句是賦值語句,在運行階段處理。
1.提升的部分只是變數聲明,賦值語句和可執行的程式碼邏輯還保持在原地不動
2.提升只是將變數聲明提升到變數所在的變數範圍的頂端,並不是提升到全域範圍
3.變數宣告和函數宣告都會得到變數提升,但函數宣告會先得到提升,然後是變數宣告。
4.對於函數宣告來說,如果定義了相同的函數變數聲明,後面定義的宣告會覆寫先前的宣告
以上是js變數提升和函數宣告預解析實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!