JS基礎 變數提公升

2021-09-12 15:58:36 字數 1211 閱讀 5871

在js中,通過var宣告的變數,無論在何處申明,都會被視為宣告於所在函式的頂部(如果不在函式內,則視為全域性作用域頂部)。申明會提公升,初始化不會提公升。

例如:當我們單獨執行console.log(a)時,**會產生異常,因為a沒有定義。

但是在後面加上var a = 123,執行結果輸出undefined

js執行分兩個步驟:

這裡起作用的就是變數提公升,編譯後的**相當於

為什麼輸出的不是123呢?因為初始化不會提公升,所以a = '123' 不會提公升至頂部。

注意的是,這裡的宣告都是通過var申明的。使用letconst宣告的變數,在達到宣告處之前都是無法訪問的,試圖訪問會導致乙個引用錯誤。

letconst必需先申明再引用,並且只會作用於當前**塊內部(函式內部、大括號內部、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 可以看出來 變數提公升只是將變數提...