我遇到了這個問題。我需要呼叫一個函式來取得一些資料:

const doSomething = () => {
 return { a: 1, b: 2 }
}

const { a, b } = doSomething()

但是我需要將這一行程式碼包裹在一個 if 區塊中,以便只在使用者已登入時執行這行程式碼。然而,將 const 宣告移到 if 區塊內部的結果是,這些變數僅在該區塊內可見。

所以我想先宣告這些變數,初始化為未定義的變數,然後在資料到達後再更新它們的值。

第一部分很簡單:

let a, b

接下來是比較「棘手」的部分,因為我們需要在物件解構之前刪除 const,但也需要用括號將整行程式碼包裹起來:

let a, b

const doSomething = () => {
 return { a: 1, b: 2 }
}

if (/\* 判斷條件 \*/) {
 ({ a, b } = doSomething())
}

另外,如果像我一樣不喜歡使用分號,則需要在這行程式碼之前加上一個分號,以防止可能的問題發生(如果你使用 Prettier,它也應該會自動為你加上分號):

let a, b

const doSomething = () => {
 return { a: 1, b: 2 }
}

if (/\* 判斷條件 \*/) {
 ;({ a, b } = doSomething())
}

這是必需的,就像在以下情況下我們必須執行這樣的操作一樣:

;(() => {
 //...
})()

這能夠避免 JavaScript 將程式碼視為單獨的一行而無需使用分號結束。