JavaScript中的分号插入机制详细介绍

仅在}之前、一个或多个换行之后和程序输入的结尾被插入

也就是说你只能在一行、一个代码块和一段程序结束的地方省略分号。

也就是说你可以写如下代码

代码如下:
但是却不可以写的像下面代码一样,这样就报错了哦
代码如下:

仅在随后的输入标记不能解析时插入

也就是说分号插入是一种错误校正机制。看代码说话

代码如下:

a = b f() //被解析为两条独立的语句 a = bf();//解析有误

所以你必须得注意下一条语句的开始,从而确定你是否能够合法的省略分号。

(、[、+、-、和/ 这五个字符开始的语句,那么最好前面不要省略分号。

举例说明一下哦

代码如下:
本来你以为没有错误,但是解析器却解析成了如下语句
代码如下:
因为第二句语句是以[开始的,所以解析器不会在第一条语句后自动插入分号,这样就解析成了如上所示,上面的式子解析时b['b'].forEach难道不是错的吗?

所以(、[、+、-、和/ 这五个字符开始的语句,那么最好前面不要省略分号。

想省略分号,有经验的程序员会在该语句的后面跟一个声明语句,以保证解析器解析正确。如下所示

代码如下:
所以如果你需要省略分号,必须检查接下来的一行开始标记是否为上述五个字符导致解析器会禁用自动插入分号,或者你也可以在(、[、+、-、和/ 这五个字符前置一个分号

省略分号导致脚本连接问题

代码如下:

//file2.js (function () { //...... })()

上述两个文件连接时,就会被解析成如下

代码如下:

所以省略分号不仅需要当心当前文件的下一个标记,而且还需要当心脚本连接后可能出现在语句之后的任一标记

为避免解析器解析错误,你可以在每个文件前缀一个额外的分号以保护脚本免受粗心连接的影响。如果文件最开始的语句以上述5个脆弱字符开关,你就应该添加额外的分号前缀。

JavaScript语法限制产生式

JavaScript语法限制产生式:不允许在两个字符之间出现换行。

举例说明:

代码如下:
上述代码就被解析成了
代码如下:

自增自减运算的分号插入规则

代码如下:
大家想想上述代码会被解析成什么样?说出谜底吧,因为自增运算符既可以作为前置运算符又可以作为后置运算符,但是后置运算符不能出现在换行之前,所以上述代码被解析成了
代码如下:

分号不会作为分隔符在for循环空语句的头部被自动插入

代码如下:
像上述的代码就会出现解析错误

空循环体的while同样也需要显示的分号,否则也会导致解析错误

代码如下:
test() { while (true) }
必须写成如下才不会报错哦
代码如下:
test() { while (true) ; }

总结一下哦

1.仅在}标记之前、一行的结束和程序的结束处推导分号 2.仅在紧接着的标记不能被解析的时候推导分号 3.在以(、[、+、-、和/ 字符开头的语句前绝不能省略分号 4.当脚本连接的时候,在脚本之间显式的插入分号 5.在return、throw、break、continue、++或--的参数之前绝不能换行 6.分号不能作为for循环的头部或空语句的分隔符而被推导出

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...