背景
在写自动执行函数时
vm.$watch('datas', function() {
console.log(vm.datas);
})
(function () {
console.log('test');
})()
出现莫名错误:
Uncaught TypeError: vm.$watch(…)(…) is not a function
解决方法:
vm.$watch('datas', function() {
console.log(vm.datas);
);
(function () {
console.log('test');
})()
一个分号搞定。
自此,又引出 JavaScript 代码中要不要加分号的经典话题
分号
在 C 语言中,分号是语句结束的标志,在语句结束的地方一定要以分号结束。而 JavaScript 的分号却是可选的,若语句都各占一行,则可以省略分号。
ASI 机制(Automatic semicolon insertion)
JavaScript 中的 ASI 机制,允许我们省略分号。ASI 机制不是说在解析过程中解析器自动把分号添加到代码中,而是说解析器除了分号还会以换行为基础按一定的规则作为断句的依据,从而保证解析的正确性。
ASI 规则
- 新行并入当前行构成非法语句时,自动插入分号
-
continue
,return
,break
,throw
后自动插入分号return => return;
a+b a+b; -
++
,--
后缀表达式作为新行开始,会在行首自动插入分号 - 代码块的最后一个语句会自动插入分号
注意
- 新行以
(
[
/
+
-
*
%
,
.
开始,很容易与上一行未加分号的代码成整体而一起解析,这明显不是我们想要的结果
结论
为增强代码可读性,减少歧义,个人意见是在语句结束时加上分号
PS:
- 不要将
++
或--
放在同一行 - 如果
return
后有参数,不要将参数放在独立的行 - 不要将括号的开始放在新的一行,理由为上一条