JS语句后加不加分号

问题

前一阵子猛然想到一个问题,JS有分号自动补全(ASI)机制,在写JS时我是习惯性在语句后面加上分号,在块语句后面不加分号。那么如果没有加分号的话,在什么情况下会出现问题?在JS语句后到底是应该加分号还是不加分号?

解决问题

面对这个问题,我来了兴趣。于是在网上查了一些资料。关于加不加分号的问题,知乎上一些回答这个问题的大佬普遍意见是,喜欢就好。嗯,很直接。
关于不加分号容易产生问题的地方,我在看了多个地方的贴子总结了一下,基本就三个地方出现问题比较多:
1)如果下一行的第一个token是 ( , [ , / , + , – 这五个字符之一的话, Javascript 将不会自动在上一行句尾加上分号。所以,当下一行的第一个token是以上字符时,应当在上一行或者行首加上分号
2)continue、return、break、throw后自动插入分号。所以当 return 出一个值,千万不要将那个值与 return 不在同一行,不然返回的结果是 undefined 而不是你期望的值。
3)++ , — 后缀表达式作为新行开始,会在行首自动插入分号,
关于我自己每回没有在块语句后面没有加分号,对于我这个强迫症来说是不是不严谨的问题,我也在一篇贴子中找到了答案, 那就是 {…} 属于块语句,而按照定义块语句是不需要分号结尾的,不管是不是在一行 , 嗯,我果然没有错。

总结

看了那么多贴子后,我感觉还是在语句后面加分号比较好,毕竟虽然麻烦一点,但是看得舒服(个人感觉),而且可以避免一些不必要的问题。

参考链接:

知乎: https://www.zhihu.com/question/20298345
ASI机制: https://segmentfault.com/a/1190000004548664
点赞