var console let console 直接报错?

不存在变量提升的let为什么影响声明前的语句?

相关代码

var a = 0
console.log(a)
let a = 9
console.log(a)
VM102:3 Uncaught SyntaxError: Identifier 'a' has already been declared
直接第三行报错,但是第二行也没有输出

顶部添加其他console代码后依然直接报错
看起来let的声明依旧被提升到了顶部?
测试环境(Safari 12)(chrome 69)

PS: var 不存在重复声明限制

var a = 0
console.log(a) //0
var a = 9
console.log(a) //9

阅读 2k
2 个回答

这是因为在控制台里,使用 let const 声明变量的时候,遵循本身定义的规则,具有块级作用域(不允许声明重复的变量名),而且定义的变量并没有销毁掉。

可以简单的理解为,如果用const和let声明变量,会在代码运行之前对所在块的代码进行检查,看是否有变量名与let和const重复了。官方标准说法就是let不允许在相同作用域内,重复声明同一个变量

推荐问题