JavaScript 控制流程(Control Flow)結構新手完整教學

Published June 28, 2025 by 徐培鈞
JavaScript

當我們開始寫程式時,常常會好奇:

電腦究竟是如何讀懂我的程式碼?又是怎麼一步步執行下去,產生預期的結果?

在 JavaScript 中,程式碼的執行順序就是由「控制流程結構」(Control Flow)來決定的。

這個概念非常基礎,但卻是寫出正確程式的第一步。

若不了解控制流程,程式碼即使語法正確,也可能得不到預期結果。

本文將從最簡單的「直線式控制流程」開始,透過詳細的範例、拆解與圖像化解釋,幫助你打好基礎,為學習更進階的判斷結構與迴圈做好準備。

什麼是控制流程?

程式執行像讀故事一樣

控制流程就是程式執行的順序。

在 JavaScript(以及大多數語言)中,程式碼通常是 從上到下、逐行執行 的。

這種執行方式就像閱讀一本故事書:第一行讀完再讀第二行,直到讀到最後一行。

這種「從頭到尾、沒有分叉」的結構,我們稱為 直線式控制流程。是所有程式控制流程中最基本、最簡單的型態。

直線式控制流程範例詳解

來看一段簡單的程式碼:

let theNumber = Number(prompt("Pick a number"));
console.log("Your number is the square root of " + theNumber * theNumber);

這段程式碼包含兩行指令,讓我們一行一行拆解:

第一行:請使用者輸入數字

當 JavaScript 執行到這一行程式碼:

let theNumber = Number(prompt("Pick a number"));

我們可以一步一步拆解它的執行邏輯:

遇到等號右邊,開始求值

程式語言在執行一行賦值語句(例如 let theNumber = ...)時,會先處理 等號右邊的運算,算出結果後,才會把結果存進左邊的變數。

因此程式會問自己:「等號右邊是什麼值?」

➡ 在這裡,等號右邊是 Number(prompt("Pick a number"))

先執行內層函式:prompt("Pick a number")

在等號右邊的運算式中,prompt()Number() 的參數。

👉 所以程式必須先執行 prompt("Pick a number"),拿到它的回傳值。

🔹 執行 prompt("Pick a number") 的效果是:

  • 瀏覽器跳出一個輸入框。
  • 程式暫停,等待使用者輸入並按下確認(OK)。
  • 使用者輸入值(例如:5)。
  • 回傳值是一個字串(例如:"5")。

注意這裡的「暫停」行為

prompt 是同步(blocking)的函式,它會讓整個程式執行暫停,直到使用者輸入資料並送出。

程式不會往下跑任何其他程式碼,直到有回傳值。

Number() 將字串轉成數字

接著,程式會把 prompt 的回傳值(例如 "5")當作 Number() 的輸入。
執行 Number("5"),結果是數字 5

把數字結果指定給變數

最後,程式將這個數字結果存進變數 theNumber

let theNumber = 5;

⚠ 為什麼從 prompt 開始?

程式是為了求出等號右邊的值(右邊的整個運算式),所以必須先從最內層的函式開始執行。

在這行程式中,最內層的函式就是 prompt(),它是 Number() 的參數。

你可以用一個「層層求值」的圖像來想像:

let theNumber = Number( prompt("Pick a number") )
                      ↑ 先跑這裡
              ↑ 然後這裡

程式執行順序是:

1️⃣ 執行 prompt("Pick a number") → 回傳 "5"
2️⃣ 執行 Number("5") → 回傳 5
3️⃣ 賦值 theNumber = 5

為何要轉型?

因為 prompt 回傳的是字串(例如 "5"),如果不轉型,數學運算時可能會變成字串相加(像 "5" + "5" 結果是 "55"),而不是數字運算。

第二行:顯示數字平方結果

console.log("Your number is the square root of " + theNumber * theNumber);

程式執行順序

1️⃣ theNumber * theNumber 計算輸入數字的平方,例如 5 * 5 = 25

2️⃣ 將結果轉成字串後和文字拼接:"Your number is the square root of 25"

3️⃣ 用 console.log() 印出結果到瀏覽器的開發者工具主控台(Console)。

💡 注意運算順序

這行程式碼中,+* 混合在一起,JavaScript 會先算乘法(*),再處理字串加號(+)。所以 theNumber * theNumber 會先被計算完成。

Number() 與資料型別轉換的重要性

在這個範例中,我們透過 Number() 函式將使用者輸入的字串轉成數字。為什麼這麼做?

prompt 的回傳型別

prompt 永遠回傳字串型別。即使使用者輸入數字 7,回傳結果還是 "7"(字串)。字串不能直接做數學運算。

Number 的角色

Number("7") → 7(數字型別)。這樣程式才能進行數學運算,不會出錯。

類似的轉型函式

除了 Number(),你還會遇到:

  • String():把資料轉成字串,例如 String(123)"123"
  • Boolean():把資料轉成布林值,例如 Boolean(0)false

了解型別轉換能避免常見錯誤,例如:

"5" + 5  // 結果是 "55",因為是字串相加
Number("5") + 5  // 結果是 10,因為兩邊都是數字

用圖像化理解控制流程

想像程式執行的流程,就像一條直線箭頭:



每一行程式就像箭頭經過的一個節點,執行完一行後,就往下一行走。

在簡單的程式中,流程是從上到下、沒有岔路的。但當我們日後學到 if 條件判斷、forwhile 迴圈時,控制流程會開始出現分支與重複。

結語

控制流程結構是程式設計的基礎概念。

從直線式控制流程開始,打好基礎,未來你會更輕鬆進入條件判斷、迴圈、函式與非同步程式等進階主題。

別忘了多練習!每寫一小段程式、每做一次測試,你都會對程式的執行順序理解得更深刻。