仅在}之前插入一行或多行,并插入程序输入的结尾。

就是说,你只可以省略分号在一行的末尾,一段代码,和程序的一个部分。

这意味着您可以编写以下代码

复制代码代码如下所示:

函数平方(x){

var

返回n

}



但是你不能像下面的代码那样写,所以它是错误的。

复制代码代码如下所示:

函数区域(r)r返回的数学。



仅当无法解析后续输入标记时插入

也就是说,分号的插入是一个错误纠正机制。

复制代码代码如下所示:

A = B

((f))

可以在该语句下面的价格中正确地解析为单个语句

a = b(f())

A = B

(f)

解析为两个单独的语句

=(BF); /分析错误



因此,您必须注意下一语句的开始,以确定是否可以合法地省略分号。

({,+,+,和)这五个字符启动语句,最好不要在它前面省略分号。

举个例子。

复制代码代码如下所示:

A = B

{ R,G,B }。foreach(功能(关键){)

console.log(关键);

});



您认为没有错误,但解析器解析成以下语句

复制代码代码如下所示:

A = B { R,G,B }。foreach(功能(关键){)

console.log(关键);

});



因为第二句是开始,所以在第一次陈述后,分析器将不会自动插入分号,解释如上图所示,分析公式对B { B }。每个没有错吗

所以,({,+,+,和)这五个字符启动语句,最好不要在它前面省略分号。

如果您想省略分号,一个有经验的程序员将在语句之后执行一个语句,以确保解析器是正确的。

复制代码代码如下所示:

A = B

var在这里添加了一条语句,以确保a(b())不被一起解析。

((f))



因此,如果需要省略分号,则必须检查下一行是否以上面的五个字符开头,这样解析器将禁用分号的自动插入,或者您可以在(、+、、和/或这五个字符)上放置分号。

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

复制代码代码如下所示:

/ / file1.js

(函数(){())

/……

})()

/ / file2.js

(函数(){())

/……

})()



当两个文件连接时,它们将被解析如下

复制代码代码如下所示:

(函数(){())

/……

}()(函数(){)

/……

})



因此,分号的省略不仅需要仔细考虑当前文件的下一个标记,而且还要注意脚本连接后可能出现的任何标记。

为了避免解析器解析错误,您可以在每个文件中添加一个额外的分号,以保护脚本不受粗心连接的影响。如果在文件的第一个语句上面描述了5个易碎字符开关,则应该添加一个额外的分号前缀。

Javascript语法限制生成

Javascript语法限制了生成:不允许在两个字符之间更改行。

例子如下:

复制代码代码如下所示:

返回

{ };



上面的代码被解析了。

复制代码代码如下所示:

返回;

{ }

;



自增自减的分号插入规则

复制代码代码如下所示:

一

+ +

B



让我们来思考一下上面的代码会被解析什么,告诉答案,因为自增操作符可以用作前操作符或后置操作符,但是在换行符之前不能出现操作符,所以上面的代码被解析了。

复制代码代码如下所示:

一个;

++;



分号不会自动作为循环空语句头中的分隔符插入。

复制代码代码如下所示:

对于(var i = 0,总= 1)

我<长度

+ +){

合计*;

}



解析错误如上面的代码所示。

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

复制代码代码如下所示:

函数中(){

虽然(真实)

}



它必须写如下。

复制代码代码如下所示:

函数中(){

虽然(真实);

}



总结。

1。仅在}的标记、行的结束和程序的结束之前。

2。只有在无法解析下列标记时才能推断分号。

三.在语句({,},+,-,和)字符开始之前,不能省略分号。

4。当脚本连接时,在脚本之间显式插入分号。

5。参数返回,扔,打破之前,继续,或不符+ +

6。分号不能派生为for循环的头或空语句的分隔符。