//Version A:
var let = true;
console.log(let);//true//Version B:
let let = 0; //syntax Error: let is disallowed as a lexically bound name
console.log(let);
我们允许使用var而不是let创建名为let的变量有什么特殊的原因吗?在这个实验中,这是否也意味着变量名let可以存在于全局级别,而不是某个范围级别?但是全局不被认为是作用域吗?
发布于 2018-06-11 09:16:57
因为说明书上是这么说的。
13.3.1 Let和Const声明
13.3.1.1静态语义:早期错误
LexicalDeclaration : LetOrConst BindingList ;
如果的BoundNames包含"let".,则BindingList
variable statement specification没有这样的限制,可能是因为在定义var时let还没有使用,而更改var的规范将是一个突破性的变化。
发布于 2018-06-11 09:18:59
有没有什么特别的原因,我们允许使用var创建的带有
名称的变量,而不是let?
为了向后兼容,它在var中是允许的。
在ES2015标准之前不存在let声明,因此let可以作为变量名自由使用。当let是一个完美的变量名时,更改语言以停止允许该变量名可能会破坏在ES2015出现之前编写的应用程序。(它涵盖了20年的时间-- 1995到2015!)
由于let是一个新特性,因此没有要破坏的现有代码,并且不允许let作为变量名避免了语法混乱的潜在来源。
https://stackoverflow.com/questions/50789375
复制相似问题