有人可以向我解释在尝试访问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中知道与此行为有关的任何事情,请知道
首先,您需要设置变量,只有在此之后,您才能访问它的值。另请参阅有关变量提升的信息。
使用'var'制成的变量始终吊起,但使用'const'或'let'制成的变量-不行。