JS基礎——變量提高

變量提高

在js中,經過var聲明的變量,不管在何處申明,都會被視爲聲明於所在函數的頂部(若是不在函數內,則視爲全局做用域頂部)。申明會提高,初始化不會提高。
例如:當咱們單獨執行console.log(a)時,代碼會產生異常,由於a沒有定義。
clipboard.png
可是在後面加上var a = 123,執行結果輸出undefined
clipboard.png
js執行分兩個步驟:函數

  • 編譯(詞法解釋/預解釋)
  • 執行

這裏起做用的就是變量提高,編譯後的代碼至關於
clipboard.png
爲何輸出的不是123呢?由於初始化不會提高,因此a = '123' 不會提高至頂部。
注意的是,這裏的聲明都是經過var申明的。使用letconst聲明的變量,在達到聲明處以前都是沒法訪問的,試圖訪問會致使一個引用錯誤。
clipboard.png
letconst必需先申明再引用,而且只會做用於當前代碼塊內部(函數內部、大括號內部、for循環內部)。一般建議變量申明優先使用const,而後再使用letspa

函數提高

function函數聲明會被提高到當前做用域 的最前面。例如,在下面例子中test函數被提高至頂部:
clipboard.png
但對於經過表達式申明的函數不會提高,以下:
clipboard.png
test變量提高了,但初始化不會提高。code

資料:《深刻理解ES6》第一章ip

相關文章
相關標籤/搜索