ReferenceError:初始化前无法访问词法声明`X'

问题描述 投票:0回答:1

有人可以向我解释在尝试访问chrome and firefox时在variable before the let declaration: "let X"中同时出现的奇怪错误消息。如果我们写类似的东西:

console.log(X);
let X;

/*
In firefox it reports an error like:

ReferenceError: can't access lexical declaration 'X' before initialization


In chrome it reports and error like:

Uncaught ReferenceError: Cannot access 'X' before initialization

*/

为什么它返回错误消息,就像您在上面的代码中看到的那样,却没有给出如下错误消息:

console.log(X);
/* the error message i was expecting:

firefox: ReferenceError: X is not defined

chrome: ReferenceError: X is not defined


*/

这也意味着let变量hoist,因为错误消息显示了已提升的let variables属性意味着JavaScript引擎知道我们在声明let variable之前尝试访问它的时间

console.log(X);
let X;
ReferenceError: can't access lexical declaration 'X' before initialization

并且如果您在ECMAScript specification中知道与此行为有关的任何事情,请知道

javascript variables let hoisting
1个回答
0
投票

首先,您需要设置变量,只有在此之后,您才能访问它的值。另请参阅有关变量提升的信息。

使用'var'制成的变量始终吊起,但使用'const'或'let'制成的变量-不行。

© www.soinside.com 2019 - 2024. All rights reserved.