理論上可以通過換行符分隔單條語句而不會(huì)導(dǎo)致錯(cuò)誤,即JavaScript會(huì)自動(dòng)在換行符前添加分號。
然而JavaScript不會(huì)在所有換行處都添加分號,只有當(dāng)試圖合并下一行的語句會(huì)導(dǎo)致語法錯(cuò)誤時(shí)才會(huì)自動(dòng)添加分號。如
var
a
=
12
+
3
會(huì)被解析成
···
var a=12+3;
但是有兩個(gè)例外,1,當(dāng)遇上return,break和continue時(shí),如果沒有分號而換行,Javascript會(huì)自動(dòng)添加分號而不會(huì)考慮下一行的語句,如:
return
a
會(huì)被解析成
return; a;
而不是
return a;
2,當(dāng)++和--兩個(gè)運(yùn)算符作為后綴運(yùn)算符時(shí),省略分號會(huì)導(dǎo)致JavaScript認(rèn)為它們是前綴運(yùn)算符,例如:
var a=10
a
++
它不會(huì)被解析成
var a=10;
a++;
而是會(huì)被解析成:
var a=10;
a;
++;
雖然這樣會(huì)造成語法錯(cuò)誤。
注意,如果一條語句以“(”,“[”,“\”,“+”開始,在省略分號的編碼風(fēng)格中,它們既有可能會(huì)被連接到前一行代碼的后面一起解析,這往往是我們不想要的,比如:
var a=b+f
(x+y)
會(huì)被解析成
var a=b+f (x+y);
變成了一個(gè)函數(shù)調(diào)用語句,雖然通常f并不是函數(shù)而會(huì)導(dǎo)致函數(shù)沒有聲明的錯(cuò)誤,但這并不是語法錯(cuò)誤,然而這也不是我們通常想要的結(jié)果,因此有一種編碼風(fēng)格會(huì)在所有以“(”,“[”,“+”,“\”符號開頭的語句前再添加一個(gè)分號。
我習(xí)慣不省略分號的編碼習(xí)慣。