重置const变量,即使它是const(ES6)

时间:2019-11-18 14:31:36

标签: javascript ecmascript-6

了解变量范围

const { response } = somecall();
if (response) {
   const { response } = someOtherCallThatReturnsUndefined(response);
   // the value of response being passed in to **someOtherCallThatReturnsUndefined** is actually undefined
}

2 个答案:

答案 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 },您是在与原始变量不同的上下文中声明变量,因此您可以这样做。