2021 年 5 月 29 日

程式碼結構

我們首先要學習的是程式碼的組成要素。

陳述句

陳述句是執行動作的語法結構和指令。

我們已經看過一個陳述句,alert('Hello, world!'),它會顯示訊息「Hello, world!」。

我們的程式碼中可以有任意數量的陳述句。陳述句可以用分號分隔。

例如,這裡我們將「Hello World」拆成兩個警示

alert('Hello'); alert('World');

通常,陳述句會寫在不同的行,以提高程式碼的可讀性

alert('Hello');
alert('World');

分號

在大部分情況下,當存在換行時,分號可以省略。

這樣也可以

alert('Hello')
alert('World')

在這裡,JavaScript 將換行解釋為「隱含」的分號。這稱為自動分號插入

在大部分情況下,換行表示分號。但「大部分情況下」並不表示「總是」!

有些情況下,換行並不表示分號。例如

alert(3 +
1
+ 2);

程式碼會輸出 6,因為 JavaScript 在這裡沒有插入分號。直覺上很明顯,如果該行以加號 "+" 結尾,則表示「未完成的表達式」,因此那裡的分號是不正確的。而在這種情況下,這會照預期運作。

但有時候 JavaScript「無法」在真正需要分號的地方假設一個分號。

在這種情況下發生的錯誤很難找到並修復。

錯誤範例

如果你有興趣看到此類錯誤的具體範例,請查看此程式碼

alert("Hello");

[1, 2].forEach(alert);

現在還不需要考慮大括號 []forEach 的含義。我們稍後會研究它們。現在,只要記住執行程式碼的結果:它會顯示 Hello,然後是 1,然後是 2

現在讓我們移除 alert 後面的分號

alert("Hello")

[1, 2].forEach(alert);

與上述程式碼相比,只有一個字元不同:第一行結尾的分號消失了。

如果我們執行此程式碼,只會顯示第一個 Hello(而且會有一個錯誤,你可能需要開啟主控台才能看到它)。沒有數字了。

這是因為 JavaScript 沒有在方括號 [...] 之前假設一個分號。因此,最後一個範例中的程式碼被視為單一陳述式。

以下是引擎看到它的方式

alert("Hello")[1, 2].forEach(alert);

看起來很奇怪,對吧?這種合併在這種情況下是錯誤的。我們需要在 alert 後面加上分號才能讓程式碼正確執行。

在其他情況下也可能發生這種情況。

我們建議在陳述式之間加上分號,即使它們由換行符號分隔。這個規則被社群廣泛採用。讓我們再次注意 - 有可能 在大部分時間省略分號。但對初學者來說,使用它們更安全。

註解

隨著時間的推移,程式會變得越來越複雜。有必要加入描述程式碼作用和原因的註解

註解可以放入腳本的任何地方。它們不會影響其執行,因為引擎會忽略它們。

單行註解以兩個正斜線字元 // 開頭。

該行的其餘部分是註解。它可以佔用自己的一整行,或跟在陳述式之後。

就像這裡

// This comment occupies a line of its own
alert('Hello');

alert('World'); // This comment follows the statement

多行註解以正斜線和星號 /* 開頭,並以星號和正斜線 */ 結尾。

像這樣

/* An example with two messages.
This is a multiline comment.
*/
alert('Hello');
alert('World');

註解的內容會被忽略,所以如果我們在 /* … */ 中放入程式碼,它不會執行。

有時暫時停用程式碼的一部分會很方便

/* Commenting out the code
alert('Hello');
*/
alert('World');
使用熱鍵!

在大部分編輯器中,可透過按下 Ctrl+/ 熱鍵為單行註解加上註解,而 Ctrl+Shift+/ 類似,可為多行註解加上註解(選取一段程式碼並按下熱鍵)。對於 Mac,請嘗試使用 Cmd 取代 Ctrl,以及 Option 取代 Shift

不支援巢狀註解!

不得在另一個 /*...*/ 內部有 /*...*/

此類程式碼會因為錯誤而中斷

/*
  /* nested comment ?!? */
*/
alert( 'World' );

請不要猶豫為您的程式碼加上註解。

註解會增加整體程式碼大小,但這完全不是問題。有許多工具會在發佈到生產伺服器之前縮小程式碼。它們會移除註解,因此它們不會出現在工作腳本中。因此,註解完全不會對生產造成負面影響。

稍後在教學課程中,將會有一個章節 程式碼品質,其中也會說明如何撰寫更好的註解。

教學課程地圖

註解

在加上註解之前閱讀這段內容…
  • 如果您有任何改進建議,請 提交 GitHub 問題 或提交拉取請求,而非加上註解。
  • 如果您無法理解文章中的某個部分,請說明。
  • 若要插入幾個字元的程式碼,請使用 <code> 標籤,若要插入多行程式碼,請將它們包覆在 <pre> 標籤中,若要插入超過 10 行的程式碼,請使用沙盒 (plnkrjsbincodepen…)