我遇到了這個問題。我需要呼叫一個函式來取得一些資料:
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 將程式碼視為單獨的一行而無需使用分號結束。