【问题标题】:Javascript automatic semicolon insertion for do-while statementsdo-while 语句的 Javascript 自动分号插入
【发布时间】:2020-04-26 09:39:41
【问题描述】:

从 ES6 开始,为 automatic semicolon insertion 的规则 1 增加了一个新的案例:

前一个标记是 ),插入的分号将是 解析为 do-while 语句 (13.7.2) 的终止分号。

这样可以避免行终止并编写丑陋的代码,例如:

do {} while (false) var a = 42

这条规则背后的基本原理是什么?一些有用的用例?

【问题讨论】:

  • 缩小器是我唯一能想到的。此外,除了do..while 循环后跟变量声明之外,我真的看不出您希望将do {} while (false) var a = 42 解析为任何其他内容的原因。
  • 我认为这只是因为} 的规则,而需要do..while 限制只是因为) 不一定会结束语句,除非它是@987654328 的一部分@,在 ) 之后的同一语句中不允许有任何其他内容

标签: javascript ecmascript-6 automatic-semicolon-insertion


【解决方案1】:

我很确定 ES2015 中添加的“案例”只是为了标准化浏览器已经实现的规则,以便与编写得非常糟糕(或奇怪地缩小)的脚本兼容。这并不完全是一个功能,它只是对规范的调整,以符合浏览器已经在做的事情。

例如,你的 sn-p 在 2013 年发布的 IE11 中运行:

do {} while (false) var a = 42;
console.log('no parse errors');

【讨论】:

  • 谢谢@CertainPerformance,我也有同样的问题。你知道为什么浏览器一开始就允许这样的代码,而不是像var x = 1 var y = 2那样让它出现语法错误吗? thesethreads引用的用例是do {} while (false) return;。但是这样的东西什么时候有用呢?
猜你喜欢
  • 2020-05-07
  • 2016-01-10
  • 1970-01-01
  • 2016-04-18
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多