var let 可以,但 let let 不行吗?

IT技术 javascript
2021-03-07 08:54:41

//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);

是否有任何特殊原因我们允许let使用var但不使用创建名称的变量let通过这个实验,这是否也意味着变量名称let可以存在于全局级别但不能存在于某个范围级别?但不是全局是考虑范围吗?

2个回答

因为规范是这么说的。

来自https://www.ecma-international.org/ecma-262/6.0/#sec-let-and-const-declarations-static-semantics-early-errors

13.3.1 Let 和 Const 声明

13.3.1.1 静态语义:早期错误

LexicalDeclaration : LetOrConst BindingList ;

  • 如果BindingList的 BoundNames包含"let".

变量声明规范有没有这样的限制,可能是因为let没有在当时使用var的定义和改变规范var将是一个重大更改。

是否有任何特殊原因我们允许使用 var 创建名称为 let 的变量而不是 let ?

允许var向后兼容。

letES2015 标准之前不存在声明,因此let可以自由用作变量名。更改语言以停止允许该变量名可能会破坏在 ES2015 存在之前编写的应用程序,当时let是一个非常好的变量名。(涵盖了 20 年——1995 年到 2015 年!)

由于let是一个新特性,没有现有的代码可以破坏,并且不允许let作为变量名避免了潜在的语法混乱来源。