【发布时间】:2017-05-13 11:00:26
【问题描述】:
打开开发控制台(或在node.js中),依次输入以下代码:
a = 1
var a = 2
const a = 3
如您所见,它可以工作,但是如果您一次输入所有代码,则会出现错误,我认为这更合理
我猜唯一的区别是提升,如果你一次输入所有代码,它将被视为:
var a
a = 1
a = 2
const a = 3
但是我不明白为什么当你逐行输入时它会起作用,而且如果你跳过第一行,你会得到一个预期的错误
【问题讨论】:
-
有趣的行为!您可能会暴露控制台环境的一些特定行为。
-
@AndyRay 我在 node.js 和不同的浏览器中尝试过,我得到了相同的结果
-
我可以想象在第一种情况下
var实际上被忽略了,因为全局对象上已经有一个名为a的属性(因为a = 1)。因此,实际上没有任何信息表明var a已被声明。正如您在第二种情况下指出的那样,var a被提升,因此在a = 1发生之前处理,因此它不会被忽略。但这是猜测,控制台/REPL 环境可能会做一些奇怪的事情。 -
不管怎样,我的 FF 确实会抛出重新声明错误,即使逐行传递也是如此。 (铬错误?)