在js中,通過var
宣告的變數,無論在何處申明,都會被視為宣告於所在函式的頂部(如果不在函式內,則視為全域性作用域頂部)。申明會提公升,初始化不會提公升。
例如:當我們單獨執行console.log(a)
時,**會產生異常,因為a沒有定義。
但是在後面加上var a = 123
,執行結果輸出undefined
js執行分兩個步驟:
這裡起作用的就是變數提公升,編譯後的**相當於
為什麼輸出的不是123呢?因為初始化不會提公升,所以a = '123' 不會提公升至頂部。
注意的是,這裡的宣告都是通過var
申明的。使用let
或const
宣告的變數,在達到宣告處之前都是無法訪問的,試圖訪問會導致乙個引用錯誤。
let
與const
必需先申明再引用,並且只會作用於當前**塊內部(函式內部、大括號內部、for迴圈內部)。通常建議變數申明優先使用const
,然後再使用let
function
函式宣告會被提公升到當前作用域 的最前面。例如,在下面例子中test函式被提公升至頂部:
但對於通過表示式申明的函式不會提公升,如下:
test變數提公升了,但初始化不會提公升。
資料:《深入理解es6》第一章
JS基礎 變數提公升
在js中,通過var宣告的變數,無論在何處申明,都會被視為宣告於所在函式的頂部 如果不在函式內,則視為全域性作用域頂部 申明會提公升,初始化不會提公升。例如 當我們單獨執行console.log a 時,會產生異常,因為a沒有定義。但是在後面加上var a 123,執行結果輸出undefined j...
JS基礎 變數提公升
在js中,通過var宣告的變數,無論在何處申明,都會被視為宣告於所在函式的頂部 如果不在函式內,則視為全域性作用域頂部 申明會提公升,初始化不會提公升。例如 當我們單獨執行console.log a 時,會產生異常,因為a沒有定義。但是在後面加上var a 123,執行結果輸出undefined j...
js變數提公升
在了解變數提公升之前,應該先了解一下js到底是一種什麼型別的語言,他的執行機制又是怎樣的.console.log global undefined var global global console.log global global function fn fn 可以看出來 變數提公升只是將變數提...