Answers:
let 在严格模式下仅是保留字:
'use strict';
var let = 5;
Uncaught SyntaxError:意外的严格模式保留字
这是因为浏览器通常优先考虑向后兼容性。尽管let是在ES2015中引入的(并且在此之前曾预见到它的用法),但用作let变量名的先前脚本将继续按需运行。例如,如果您的脚本是在2008年编写的:
var let = 2;
console.log(let);
然后它将在2020年继续发挥作用。
对于非常类似的原因,async并且await也被允许作为变量名。
至于为什么let在严格模式下使用错误-严格模式是在2009年的ES5中引入的。当时,语言设计者认为将来有可能使用新关键字来声明变量,但事实并非如此。还没有定下来,而ES6还有很长的路要走。ES5发布后,脚本编写者可以选择采用严格模式,以减少代码的混乱度,并将静默错误更改为显式错误。尽管尚let不能用于变量声明,但在严格模式下将其禁止为变量名可以提高以后选择进入严格模式的脚本的可读性,同时也不会破坏任何现有脚本。
let其他一些作品仅在严格模式下充当保留字。该规范说
不允许在严格模式:那些被上下文不允许作为标识符,在严格模式的代码:
let,static,implements,interface,package,private,protected,和public;
您可以let在仅严格模式下禁止的单词列表内看到。如果要抛出错误以let用作变量名,可以使用严格模式
"use strict";
var let = 3