var let是好的,但让我们不是吗?

时间:2018-06-11 01:06:03

标签: javascript

//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 个答案:

答案 0 :(得分:4)

因为规范是这样说的。

来自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" ,则语法错误。
  •   

variable statement specification没有此类限制,可能是因为let在定义var时未使用,并且更改var的规范将会破坏变化

答案 1 :(得分:3)

  

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

var允许向后兼容。

在ES2015标准之前,

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

由于let是一项新功能,因此没有现有代码可以中断,并且禁止let作为变量名称可能会避免语法混淆的潜在来源。