【发布时间】:2019-08-09 13:35:50
【问题描述】:
在 ECMAScript 2019 中,可以使用 let 声明一个新的(词法绑定)变量。 (规范第13.3.1节https://www.ecma-international.org/ecma-262/10.0/index.html#prod-LexicalDeclaration)
为什么关键字列表中没有let
(https://www.ecma-international.org/ecma-262/10.0/index.html#prod-Keyword
也在第 11.6.2.1 节)?
【问题讨论】:
-
我不知道为什么。我的猜测是,它与“在评估 LexicalBinding 时,而不是在创建变量时,为由带有 Initializer 的 LexicalBinding 定义的变量分配其 Initializer 的 AssignmentExpression 的值有关。如果 let 声明中的 LexicalBinding 确实如此没有初始化器,当评估 LexicalBinding 时,变量被赋值为 undefined。"
-
有“静态语义规则确保这种形式的 LexicalBinding 永远不会出现在 const 声明中。”这种差异可能与为什么选择将 let 排序为保留字而不是严格关键字有关。
-
向后兼容性。
var let = 1是有效的,因为它可能在旧代码中使用,而let let = 1会抛出 SyntaxError。 -
@str 你的解释是合理的。我猜
const在早期版本的 EcmaScript 中被定义为关键字,但没有分配给语义。所以const现在列在关键字列表中,并且也被主流浏览器实现了。
标签: javascript