为什么可以给变量 "let" 赋值?
Why is assigning a value to the variable "let" possible?
我正在参加在线 JS 课程,讲师使用的语法是:let = names = ["Bob","Tim","Larry"]
。我确信那是一次意外,但他使用的 JS 环境以某种方式允许了。他最终所做的(可能是偶然的)是将数组分配给 "names" 变量,后者又将其分配给 "let" 变量。
我的问题:为什么这不是错误?为什么"let"可以作为变量?我们知道 "let" 是关键字。或者这只是他们还没有取缔的东西?您仍然可以在 Chrome 和 Firefox 控制台中执行此操作……就此而言,在 Node 中也是如此。
由于向后兼容性问题,它不在您的浏览器正在执行的 EcmaScript 版本的保留关键字列表中。您可以在现代浏览器中使用 .js
文档中的 'use strict'
来选择退出此行为。至于哪些关键字将来要保留,但在今天的浏览器中最有可能仍未保留的关键字列表,请看这个列表:JavaScript List of Reserved Keywords。请注意,标有 *
的是 ES5 - ES6 特定关键字,这意味着这些可能会在稍后添加到实际列表中。
请注意,const
是在较早阶段添加的,因此它是今天的保留关键字并且已正确实施。
在 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 "strict mode"。 const
仍在未来保留字列表中,let
在严格模式下将被视为未来保留字:http://www.ecma-international.org/ecma-262/5.1/index.html#sec-7.6.1
ES6给const
和let
赋予了意义,但是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
作为普通标识符的现有代码。
我正在参加在线 JS 课程,讲师使用的语法是:let = names = ["Bob","Tim","Larry"]
。我确信那是一次意外,但他使用的 JS 环境以某种方式允许了。他最终所做的(可能是偶然的)是将数组分配给 "names" 变量,后者又将其分配给 "let" 变量。
我的问题:为什么这不是错误?为什么"let"可以作为变量?我们知道 "let" 是关键字。或者这只是他们还没有取缔的东西?您仍然可以在 Chrome 和 Firefox 控制台中执行此操作……就此而言,在 Node 中也是如此。
由于向后兼容性问题,它不在您的浏览器正在执行的 EcmaScript 版本的保留关键字列表中。您可以在现代浏览器中使用 .js
文档中的 'use strict'
来选择退出此行为。至于哪些关键字将来要保留,但在今天的浏览器中最有可能仍未保留的关键字列表,请看这个列表:JavaScript List of Reserved Keywords。请注意,标有 *
的是 ES5 - ES6 特定关键字,这意味着这些可能会在稍后添加到实际列表中。
请注意,const
是在较早阶段添加的,因此它是今天的保留关键字并且已正确实施。
在 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 "strict mode"。 const
仍在未来保留字列表中,let
在严格模式下将被视为未来保留字:http://www.ecma-international.org/ecma-262/5.1/index.html#sec-7.6.1
ES6给const
和let
赋予了意义,但是let
仍然不是保留字。相反,它在 http://www.ecma-international.org/ecma-262/6.0/#sec-keywords:
In strict mode code,
let
andstatic
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
作为普通标识符的现有代码。