JavaScript中的分号插入机制详细介绍
来源: 阅读:662 次 日期:2015-02-13 11:04:47
温馨提示: 小编为您整理了“JavaScript中的分号插入机制详细介绍”,方便广大网友查阅!

这篇文章主要介绍了JavaScript中的分号插入机制详细介绍,本文讲解JavaScript中各种情况下的分号插入机制,需要的朋友可以参考下

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

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

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

代码如下:

function square(x) {

var n = +x

return n * n

}

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

代码如下:

function area(r) { r = +r return Math.PI*r*r }//error

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

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

复制代码 代码如下:

a = b

(f())

//能正确的解析为一条单独的语句 单价于下面这条语句

a = b(f())

a = b

f()

//被解析为两条独立的语句

a = bf();//解析有误

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

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

举例说明一下哦

代码如下:

a = b

['r', 'g', 'b'].forEach(function (key) {

console.log(key);

});

本来你以为没有错误,但是解析器却解析成了如下语句

代码如下:

a = b['r', 'g', 'b'].forEach(function (key) {

console.log(key);

});

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

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

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

代码如下:

a = b

var x//特意在此加了声明语句以保证a = b不会和(f())解析到一块儿

(f())

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

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

代码如下:

//file1.js

(function () {

//......

})()

//file2.js

(function () {

//......

})()

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

代码如下:

(function () {

//......

})()(function () {

//......

})()

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

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

JavaScript语法限制产生式

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

举例说明:

代码如下:

return

{};

上述代码就被解析成了

代码如下:

return;

{}

;

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

代码如下:

a

++

b

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

代码如下:

a;

++b;

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

代码如下:

for (var i = 0,total=1

i < length

i++) {

total*=i;

}

像上述的代码就会出现解析错误。

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

代码如下:

function mytest() {

while (true)

}

必须写成如下才不会报错哦

代码如下:

function mytest() {

while (true) ;

}

更多信息请查看IT技术专栏

更多信息请查看脚本栏目
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map