js自动加分号的一些问题

我们都知道,js在写代码的时候,在每一行最后是可以不写分号 “;” 的,因为js会自动帮我们加上分号。不过,js的这种机制做的并不好。实际上,js并不是在每一行结尾加上分号,而是当你这行代码能够正常被解析的时候,就会在结尾加上分号,如果不能解析,则合并下一句代码,直到可以解析为止。例如:

b =

1

上面的代码会解析成:b = 1;

 

有这么一种情况:当我某一行代码不写分号,而下一行代码是以“(” 开头的,即使这行语句是可解析的语句,也会将两行代码合并为一行进行解析。正是因为这种机制,所以在js中写代码的时候,会出现一些跟你意料中不一样的结果。比如说:

a = 1

(a + 2).toString()

上面的代码我们认为它会这样执行:

a = 1;

(a + 2).toString();

但事实上,它是这样执行的:

a = 1(a +2).toString();

最终结果:Uncaught ReferenceError: a is not defined

 

当我们使用封闭函数的时候,不加分号也可能会发生这种错误:

var a = 1

(function(){})()

上面的的语句会这样执行:

var a = 1(function(){})()

最终结果:Uncaught TypeError: 1 is not afunction

 

终上所述:为了程序不出现意料之外的结果,养好良好的js编码习惯,建议大家在每条语句结束时手动加上分号,同时这也是为了项目上线之后进行代码压缩所做的准备工作。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值