了解变量范围
const { response } = somecall();
if (response) {
const { response } = someOtherCallThatReturnsUndefined(response);
// the value of response being passed in to **someOtherCallThatReturnsUndefined** is actually undefined
}
答案 0 :(得分:2)
您正在做的事情称为variable shadowing。
当您使用const
(或let
)声明变量时,它是基于块范围的:第二次声明新的response
常量时,您位于另一个范围内,所以它们是不同的变量。但是,它们具有相同的名称,这意味着您正在 shadowing 外层(可能会导致bug)。并阻止内部范围访问外部范围的变量。
要清楚:
const foo = "1";
{
const foo = "bar";
console.log(foo); // "bar"
}
console.log(foo); // "1";
内部块中的变量foo
与外部块中的foo
完全不同,实际上,当您退出该块时,您仍然拥有正确的值。他们只是“共享”相同的名称,就是这样。
答案 1 :(得分:1)
通过说const { response }
,您是在与原始变量不同的上下文中声明变量,因此您可以这样做。