【发布时间】:2020-06-15 11:09:20
【问题描述】:
我们知道let 是一个reserved 关键字,它在JavaScript 中定义了一个变量。
var let = 2;
console.log(let); // return 2
那么为什么这不是错误呢?
【问题讨论】:
标签: javascript
我们知道let 是一个reserved 关键字,它在JavaScript 中定义了一个变量。
var let = 2;
console.log(let); // return 2
那么为什么这不是错误呢?
【问题讨论】:
标签: javascript
let 只是严格模式下的保留字:
'use strict';
var let = 5;
Uncaught SyntaxError: Unexpected strict mode reserved word
这是因为浏览器通常优先考虑向后兼容性。尽管let 是在 ES2015 中引入的(并且在此之前的某个时候就已经预见到了它的使用),但以前使用 let 作为变量名的脚本将继续按需要工作。例如,如果您的脚本是在 2008 年编写的:
var let = 2;
console.log(let);
然后它也将在 2020 年继续工作。
出于非常相似的原因,async 和 await 也是 permitted as variable names。
至于为什么在严格模式下使用let 错误——严格模式是在 2009 年在 ES5 中引入的。当时,语言设计者看到使用 new 关键字来声明变量是可能的未来,但它还没有一成不变,ES6还有很长的路要走。一旦 ES5 出现,脚本编写者可以选择进入严格模式以减少代码混乱,并将静默错误更改为显式错误。虽然let 还不能用于变量声明,但在严格模式下禁止它作为变量名提高了选择进入严格模式的未来脚本的可读性,同时也不破坏任何现有脚本。
【讨论】:
let 和其他一些作品仅在严格模式下充当保留字。 specs 说
在严格模式下不允许:那些在上下文中不允许作为标识符的,在严格模式下代码:
let、static、implements、interface、package、private、protected、public;
您可以在仅在严格模式下不允许使用的单词列表中看到let。如果你想在使用let 作为变量名时抛出错误,你可以使用严格模式
"use strict";
var let = 3
【讨论】: