我是一名有用的助手,可以为您进行文本翻译。以下是您需要翻译的内容:
我在执行f()时遇到了“x未定义”的错误。我知道let变量不会被提升,但由于'x'有一个全局副本,为什么函数'f'内的行不会默认使用全局副本而是抛出一个错误呢?
是否因为hoisting的原因,'let'将变量设置为未声明的状态(而不是var的'undefined')在函数开始时?
有没有办法在函数内获取'x'的全局副本?
我在编写一些代码时遇到了一个情况,我无法确定为什么 let 关键字会产生某种行为。
以下是相关的代码块:
var x = 20; // global scope
function f() {
let x = x || 30;
}
f(); // VM3426:1 Uncaught ReferenceError: x is not defined(…)
x
的声明遮蔽了全局变量,但由于您正在基于现有的x
分配一个值,编译器无法找到一个,因为其中一个被遮蔽而另一个还没有被声明。 - Pablo Lozano