首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >var let是可以的,但let不是?

var let是可以的,但let不是?
EN

Stack Overflow用户
提问于 2018-06-11 09:06:03
回答 2查看 475关注 0票数 3

//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可以存在于全局级别,而不是某个范围级别?但是全局不被认为是作用域吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-11 09:16:57

因为说明书上是这么说的。

来自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 ;

如果的BoundNames包含"let".,则BindingList

  • 是语法错误

variable statement specification没有这样的限制,可能是因为在定义varlet还没有使用,而更改var的规范将是一个突破性的变化。

票数 4
EN

Stack Overflow用户

发布于 2018-06-11 09:18:59

有没有什么特别的原因,我们允许使用var创建的带有

名称的变量,而不是let?

为了向后兼容,它在var中是允许的。

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50789375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档