“let”vs“var”在“block”中

时间:2017-01-09 06:23:45

标签: javascript ecmascript-6

不确定这是否已在其他地方得到解答。我已经通过了this回答

这是我的代码:

var fruit = "apple";
if (true) {
  console.log(fruit); // expected "apple" 
  let fruit = "orange"; // since this is not hoisted to the top
  console.log(fruit); // "orange" as expected
}

为什么我们无法访问fruit块内的外部变量if。我知道用let声明的变量不会在块/函数范围内提升。

我收到Uncaught ReferenceError: fruit is not defined错误。为什么这样?

虽然,如果我将if块中的变量名更改为其他名称,那么它会按预期工作。那么为什么这个同名的冲突,主要是let fruit = "orange"没有被提升到顶部。

1 个答案:

答案 0 :(得分:2)

  • 变量'fruit'的范围在块内定义。
  • 请查看参考资料。您的情况在“时间死区和错误发生”下得到了很好的解释。 '另一个例子'

参考 - https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/let

由于 斯利拉姆