JavaScript   发布时间:2022-04-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了javascript – 为什么“抛出”限制生产自动分号插入?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
JavaScript的自动分号插入算法的一部分是所谓的“限制性制作”.这些是句法形式,禁止在某一点发生换行符.引用ECMAScript 2015规范:

ECMAScript 2015规范中有10个限制产品:

> PostfixExpression [Yield]:LeftHandSideExpression [?Yield] [此处没有LineTerminator]
> PostfixExpression [Yield]:LeftHandSideExpression [?Yield] [此处没有LineTerminator] –
> ConTinueStatement [Yield]:继续[此处没有LineTerminator] LabelIdentifier [?Yield];
> BreakStatement [Yield]:break [此处没有LineTerminator] LabelIdentifier [?Yield];
> ReturnStatement [Yield]:返回[此处没有LineTerminator]表达式;
> ReturnStatement [Yield]:返回[此处没有LineTerminator]表达式[In,?Yield];
> ThrowStatement [Yield]:抛出[此处没有LineTerminator]表达式[In,?Yield];
> ArrowFunction [In,Yield]:ArrowParameters [?Yield] [此处没有LineTerminator] => ConciseBody [呢?]
> YieldExpression [In]:yield [此处没有LineTerminator] * Assignmentexpression [?In,Yield]
> YieldExpression [In]:yield [此处没有LineTerminator] Assignmentexpression [?In,Yield]

在这些作品中,我理解选择使大部分作品受到限制.限制PostfixExpression的生成以防止使用PrefixExpression解析歧义. ConTinueStatement,BreakStatement和ReturnStatement具有受限制的产品,因为有相应的产品,其中break和conTinue不带标签,return不带表达式.我不能说我对箭头函数或屈服表达式了解得足以知道为什么它们受到限制,但我认为这是为了防止某种类似的解析模糊.

我不理解的制作是ThrowExpression.据我所知,使用throw时没有解析歧义,就像使用break,return和conTinue时一样:毕竟,throw;是无效的JavaScript.我认为这可能是出于历史原因,但据我所知,扔掉;从未在任何JavaScript规范中被允许.

这样做的实际结果就像返回一样,你不能把表达式抛到下一行,例如这是错的:

throw
new Error("some error");

但是,与return不同,这与将新的Error()放在同一行上没有不同的行为.这只是一个语法错误:Chrome将其报告为

ThrowExpression的生产是否仅限于保持与类似结构的一致性?或者是否有一些我没有看到的歧义?

解决方法

当在1998年左右将throw添加到语言中时,讨论了throw语句是否需要表达式. (另一种方法是没有表达式的throw会重新抛出当前的异常对象,如 certain other languages所示.)

我@R_696_9112@关于这次讨论或最终解决方案的记录 – 然我们知道决议是什么 – 但是在2007年2月19日的会议上提到了它.我认为这是限制是让句法空间保持开放,以防有一天决定改变.

大佬总结

以上是大佬教程为你收集整理的javascript – 为什么“抛出”限制生产自动分号插入?全部内容,希望文章能够帮你解决javascript – 为什么“抛出”限制生产自动分号插入?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。