我们都知道,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编码习惯,建议大家在每条语句结束时手动加上分号,同时这也是为了项目上线之后进行代码压缩所做的准备工作。