do while语句的Javascript自动分号插入

do while语句的Javascript自动分号插入,javascript,ecmascript-6,automatic-semicolon-insertion,Javascript,Ecmascript 6,Automatic Semicolon Insertion,自ES6以来,增加了以下规则1的新案例: 前面的标记是),插入的分号将是 解析为do while语句的终止分号(13.7.2) 这样可以避免行终止并编写丑陋的代码,例如: do {} while (false) var a = 42 这条规则背后的理由是什么?一些有用的用例?我敢肯定,ES2015中添加的“case”只是为了标准化浏览器已经实现的规则,以便与编写糟糕(或奇怪地缩小)的脚本兼容。这并不完全是一个新特性,更重要的是它是对规范的一个调整,以符合浏览器已经在做的事情 例如,您的代码段在

自ES6以来,增加了以下规则1的新案例:

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

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

do {} while (false) var a = 42
这条规则背后的理由是什么?一些有用的用例?

我敢肯定,ES2015中添加的“case”只是为了标准化浏览器已经实现的规则,以便与编写糟糕(或奇怪地缩小)的脚本兼容。这并不完全是一个新特性,更重要的是它是对规范的一个调整,以符合浏览器已经在做的事情

例如,您的代码段在2013年发布的IE11中运行:

do{}while(false)var a=42;

log(“无解析错误”)迷你们是我唯一能想到的。另外,我真的看不出有什么理由希望
do{}while(false)var a=42
被解析为
do..while
循环后跟变量声明。我认为这只是因为
}
的规则,而
do..while
限制之所以需要,只是因为
不一定是语句的结尾,除非它是
do..while的一部分。
,在
之后的同一语句中不允许有任何其他内容。