javascript - 为什么可以给变量 "let"赋值?

标签 javascript syntax ecmascript-6 let

我正在参加在线 JS 类(class),讲师使用的语法:let = names = ["Bob","Tim","Larry"] 。我确信这是一次意外,但他所使用的 JS 环境以某种方式允许了这一点。他最终所做的(可能是偶然的)是将数组分配给“names”变量,该变量将其分配给“let”变量。

我的问题:为什么这不是错误?为什么“let”可以用作变量?我们知道“let”是一个关键字。或者这只是他们还没有取缔的事情?您仍然可以在 Chrome 和 Firefox 控制台中执行此操作……就此而言,也可以在 Node 中执行此操作。

最佳答案

在 ES3 和更早的 JavaScript 版本中,let 没有任何特殊含义,可以用作标识符。然而,const 已经出现在未来保留字的列表中。请参阅http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf , 7.5.1 保留字。

ES5 添加了“严格模式”。 const 仍在未来保留字列表中,而 let 将被视为严格模式下的 future 保留字: http://www.ecma-international.org/ecma-262/5.1/index.html#sec-7.6.1

ES6 赋予了 constlet 含义,但 let 仍然不是保留字。相反,它在 http://www.ecma-international.org/ecma-262/6.0/#sec-keywords 中说:

In strict mode code, let and static are treated as reserved keywords through static semantic restrictions (see 12.1.1, 13.3.1.1, 13.7.5.1, and 14.5.1) rather than the lexical grammar.

换句话说,在严格模式之外,您可以使用 let 作为变量名并声明其他变量。

let 没有成为保留字的原因可能是为了不破坏可能使用 let 作为普通标识符的现有代码。

关于javascript - 为什么可以给变量 "let"赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45521283/

相关文章:

syntax - OCaml 的 `type a. a t` 语法

MySQL更新错误

javascript - 在 JavaScript 中比较 2 个数组

javascript - 将 React 组件导出为数组的最简洁方法是什么?

Google 跟踪代码管理器中的 Javascript 编译器错误 : this language feature is only supported for ECMASCRIPT6 mode or better

javascript - 弹出窗口的大小与其内容不匹配

javascript - AngularJs 值更改时隐藏输入的调用函数 $watch

javascript - JQuery - 无法识别动态元素

asp.net - Access OLEDB 报告 "syntax error"但该语句看起来正确

javascript ecma6 将数组项转换为键值对的对象