我遇到了这个问题。我正在调用一个函数来获取一些数据。
const doSomething = () => {
return { a: 1, b: 2 }
}
const { a, b } = doSomething()
但我需要把它包在一个if 块中,只有在用户登录的情况下才执行这一行,而把const 的声明移到if 块中,使得这些变量在该块之外是看不见的。
所以我想先声明这些变量,作为未定义的变量,然后在数据进来的时候更新它们。
第一部分很容易。
接下来才是 "棘手 "的部分,因为我们在对象解构之前删除了const ,但我们还需要把所有的行都包进括号里。
let a, b
const doSomething = () => {
return { a: 1, b: 2 }
}
if (/* my conditional */) {
({ a, b } = doSomething())
}
另外,如果你像我一样不喜欢使用分号,你需要在这一行之前添加一个分号,以防止可能出现的括号周围的问题(如果你使用的话,Prettier也应该自动为你添加)。
let a, b
const doSomething = () => {
return { a: 1, b: 2 }
}
if (/* my conditional */) {
;({ a, b } = doSomething())
}
这一点是需要的,就像我们在有一个IIFE(即时调用的函数表达式)的时候需要这样做。
以防止JavaScript在不同的行中出现混乱的代码,但不以分号结束。