JavaScript吊起了什麼?

吊裝在JavaScript編程語言中的含義的簡要說明

JavaScript在執行代碼之前對其進行解析,並將找到的每個函數和變量聲明添加到其自己的內存中,並將它們保存在內存中。這就是所謂的吊裝

對於函數聲明和函數表達式,我們有一些不同的行為。

使用函數聲明,我們可以在定義函數之前調用它,然後我們的代碼將起作用。在其他情況下,我們會出現錯誤。

一般的經驗法則是,在使用函數,變量,對象和類之前,請務必對其進行定義,以免引起意外。

假設我們有一個函數:

function bark() {
  alert('wof!')
}

由於吊裝,我們可以在技術上調用bark()在聲明之前:

bark()
function bark() {
  alert('wof!')
}

使用功能時,這僅在以下情況下發生函數聲明。就像上面的情況一樣。

不適用於函數表達式

這是一個函數表達式:

bark()
var bark = function() {
  alert('wof!')
}

在這種情況下,var聲明被初始化並初始化undefined作為值,是這樣的:

var bark = undefined
bark()
bark = function() {
  alert('wof!')
}

運行此代碼將為您提供TypeError: bark is not a function錯誤。

constlet聲明也被吊起,但是它們沒有被初始化為undefined,如var

const bark = function() {
  alert('wof!')
}

或者

let bark = function bark() {
  alert('wof!')
}

在這種情況下,如果您調用bark()在聲明它之前,它將給您一個ReferenceError: Cannot access 'bark' before initialization錯誤。

將對像或類分配給變量的任何其他表達式也會發生同樣的情況

類聲明的工作方式類似於letconst聲明:它們被吊起,但未初始化,並且在聲明之前使用類會給ReferenceError: <Class> is not defined錯誤。

免費下載我的JavaScript初學者手冊


更多js教程: