【发布时间】:2019-07-25 13:38:48
【问题描述】:
我尝试在控制台中逐行编写以下行
let x = y //throws error "Uncaught ReferenceError: y is not defined"
console.log(x) //throws error "ReferenceError: x is not defined"
let x = 3; //gives error "Uncaught SyntaxError: Identifier 'x' has already been declared"
x = 3 //ReferenceError: x is not defined
现在的问题是,一个变量未定义怎么可能同时已声明。两者有什么区别。
【问题讨论】:
-
浏览器控制台对语言的使用不当。那些
ReferenceErrors 真的应该说这个变量不是“声明的”,但是一直都是这样。 -
来自链接:有赋值时,先解析右边;如果右侧抛出错误,它永远不会到达左侧,并且用 let 声明的变量永远不会被正确初始化;它将永远停留在非军事区/临时死区(并且您不能重新声明已声明的变量,即使在初始化期间尝试的赋值引发了错误)。
-
声明和初始化有很大区别。在您的第一行
x = y中,您声明了x并尝试将y分配给它,即undefined,因此声明了x,并将使用undefined初始化为value。这就是你得到x的原因。 -
@MaheerAli
let x = 3;将抛出错误,因为您已经声明了它。但是x=3不应该抛出错误,除非你将它定义为const -
被声明并不意味着它将被初始化为未定义。 Are variables declared with let or const not hoisted in ES6?
标签: javascript variables