初學者指南:什麼是 Runtime 執行環境?

更新日期: 2025 年 4 月 26 日

什麼是程式?

簡單定義:給電腦的「指令清單」

程式(program)就是一串給電腦的指令清單

這些指令告訴電腦該做什麼事情、按照什麼順序做。

✅ 你可以想像程式就像是:

  • 食譜(告訴你一步步怎麼做蛋糕)
  • 組裝說明書(一步步教你組一張桌子)
  • 導航指示(一步步告訴你要怎麼走到目的地)

電腦本身很厲害,但它完全不會自己想事情。
必須有人(程式設計師)告訴它每個小步驟,它才知道該怎麼做。

程式由什麼組成?

一個程式通常是由很多行的指令(code)組成的,這些指令會包含:

  • 資料:要處理的東西(比如一個名字、一個數字)
  • 操作:要對資料做什麼事(比如加起來、比較大小、顯示出來)
  • 流程控制:決定下一步要做什麼(比如如果分數超過60分就顯示「及格」)

舉個超簡單的例子:

(這是一個「計算加總」的小程式)

let a = 5;
let b = 7;
let total = a + b;
console.log(total);

這個程式告訴電腦:

  1. 把 5 存到 a 裡
  2. 把 7 存到 b 裡
  3. 把 a 和 b 加起來,存到 total 裡
  4. 把 total 的結果印出來

所以電腦最後就會印出 12


什麼是執行環境?

簡單定義:程式運作時的「工作空間」

當你寫好一個程式以後,電腦還需要一個地方來「執行」這些指令。

這個地方,就是我們說的「執行環境(execution environment)」。

✅ 可以把執行環境想成一個:

  • 教室(讓學生有地方上課)
  • 廚房(讓廚師能夠煮菜)
  • 工廠(讓工人能夠生產產品)

你的程式就像是工人,而執行環境就是工廠本身,裡面會提供必須的資源,讓工人(程式)可以順利工作。

執行環境是做什麼的?

當程式開始執行時,電腦會建立一個「執行環境」,這個環境會幫忙做幾件非常重要的事情:

記錄資料

  • 幫你保管變數和值,例如:記住 a = 5b = 7 這些資訊。

管理操作

  • 控制程式執行的流程,例如:遇到 console.log(total) 時要顯示結果。

提供工具

  • 預先準備一些常用的功能,像是數學計算、印出資料、跟外界溝通的能力。

✅ 小提醒:如果沒有執行環境,程式就算寫好了,也根本「沒地方可以跑」,會像無家可歸的指令一樣,什麼都做不了!

更具體一點:執行環境裡面長什麼樣子?

可以想像執行環境裡會有很多「小格子」,每個格子負責一個綁定(binding)。

例如:

名稱資料
a5
b7
total12
console一個可以印出文字的功能

當你的程式說 console.log(total) 的時候,電腦就會:

  • 先在這個環境裡找到 console 這個名字,拿出「印出文字」這個功能。
  • 再找到 total 這個名字,拿到 12 這個數字。
  • 然後執行印出 12 的動作。

✅ 這個過程,全部都是靠執行環境來完成的。


為什麼每種程式語言都需要執行環境?

程式本身只是「死的文字」

首先要理解一件事情:

  • 程式碼(像是 JavaScript、Python、C++ 這些)本質上只是文字
  • 如果只是把程式碼寫在電腦裡,電腦是看不懂也做不了任何事的。

✅ 電腦不會自動懂「let a = 5」是什麼意思,它只會當成一堆亂碼看待。

執行環境是「解讀指令」+「提供支援」的地方

為了讓這些死的文字變成可以運作的東西,需要兩件事:

  1. 有人懂得讀這些指令(翻譯成電腦能理解的語言)
  2. 有人準備好基本功能和工具(像記憶資料、做數學運算、印出結果等等)

這個「有人」指的就是——執行環境(execution environment)

✅ 簡單來說:

執行環境是負責「翻譯程式指令+提供執行資源」的超級助理。

沒有它,程式就只是一堆靜靜躺在檔案裡的文字,永遠跑不起來。

為什麼每種語言都要自己準備執行環境?

因為不同程式語言,講的是不同的「語言」

舉例來說:

  • JavaScript 的 console.log('Hello')
  • Python 的 print('Hello')
  • C++ 的 std::cout << "Hello";

雖然這些指令都是「把文字印出來」,但是寫法完全不一樣

✅ 所以,每種程式語言:

  • 需要有自己專門的環境,能夠正確理解它的語法。
  • 必須提供符合該語言標準的工具、函式和行為。

比如:

語言專用執行環境範例
JavaScript瀏覽器(Chrome, Firefox)或 Node.js
PythonPython 直譯器(CPython, PyPy)
C++編譯器 + 作業系統支援

每種語言,都有自己專屬的「翻譯員」和「工具箱」。

如果沒有執行環境,會發生什麼事?

如果沒有執行環境,程式就會:

  • 無法被解讀(電腦不知道這些指令要做什麼)
  • 無法保管資料(像 a=5 這樣的值也無法儲存)
  • 無法進行互動(例如你打開網頁點按鈕,什麼事都不會發生)

✅ 簡單說:

沒有執行環境,程式=廢紙。

電腦只會傻傻地看著一堆無意義的文字,什麼行動也不會有。


執行環境有哪些重要特性?

當程式在運作時,執行環境會負責管理一切讓程式可以順利執行的資源和行為。

這個環境本身有幾個很重要的特性,每一個特性都直接影響程式能不能正常運作。

包含綁定(Binding)

在執行環境裡,最基本的一件事情就是:

將「名稱」和「實際的資料或功能」連在一起,這個動作叫做「綁定」。

✅ 比如說:

let name = 'Tom';

這裡的 name 這個名字,綁定到 'Tom' 這個資料上。

✅ 執行環境會記錄下這些綁定,讓你的程式在後面可以透過名字,隨時取出或操作資料。

提供互動的管道與手段(Interaction Mechanisms)

除了管理「自己內部的資料」以外,執行環境還有另一個很重要的功能:

讓程式能跟「外界」互動。

什麼叫「外界」?

  • 使用者(比如滑鼠點擊、鍵盤輸入)
  • 網路(比如請求伺服器資料)
  • 檔案系統(比如讀取或儲存檔案)
  • 其他裝置(像是印表機、相機)

✅ 舉例來說,如果你的程式想要:

  • 讀取使用者輸入的帳號密碼
  • 把資料送到一台遠端伺服器
  • 顯示一張從網路下載下來的圖片

這些事情不是靠單純的程式指令就能完成,而是要透過執行環境提供的管道(API、方法)來達成。

如果沒有這些互動的手段,程式就會變成一個只能自己計算數字、什麼事也不能對外做的「孤島」。


執行環境的常見例子

瀏覽器中的執行環境

最常見、最熟悉的執行環境,就是「瀏覽器」!

當你開啟 Chrome、Firefox、Safari 的時候,瀏覽器會自動幫你建立一個 JavaScript 的執行環境。

這個環境裡面已經內建了很多功能,幫助你的程式跟使用者、網路互動。

✅ 例如瀏覽器提供的功能包括:

  • 事件監聽器(Event Listener)
    讓你的程式能夠偵測使用者的操作,例如滑鼠點擊、鍵盤輸入。
  • 網路請求(Network Request)
    讓你的程式可以透過 fetchXMLHttpRequest 去跟伺服器拿資料。
  • 計時器功能(Timers)
    讓你可以使用 setTimeoutsetInterval,設定延遲執行或重複執行的動作。
  • DOM 操作(Document Object Model)
    讓你的程式可以動態改變網頁上的內容,例如新增一個按鈕,改變文字等等。

瀏覽器執行環境帶來的互動例子

有了這些內建功能,你的網頁程式就可以做到:

  • 點擊按鈕,觸發一個事件(例如:彈出一個提示框)
  • 填寫表單,把資料送到伺服器(例如:登入系統)
  • 自動從後端載入新的資料並更新畫面(例如:看到新的貼文出現)

✅ 小提醒:

這些功能並不是「原生 JavaScript」本身就擁有的,而是瀏覽器這個執行環境額外提供的功能

如果你單純把 JavaScript 程式碼拿到別的環境(比如 Node.js),那些像是 documentwindow 的東西就會消失,因為那已經不是瀏覽器了!


不同執行環境的差異

雖然「執行環境」這個概念在各種程式語言裡都是共通的,但不同的平台、不同的語言,實際提供的功能和資源卻差異很大!

為了幫助理解,我們可以從三個常見的執行環境來比較:

項目瀏覽器(Browser)Node.jsPython 執行器
使用語言JavaScriptJavaScriptPython
主要目標操作網頁、互動式內容操作伺服器、後端程式廣泛用途(科學運算、網頁後端、腳本)
提供的互動功能DOM 操作、事件監聽、網路請求(AJAX)檔案系統存取、建立伺服器、處理網路連線檔案存取、資料處理、第三方套件(如 requests)
能否直接操作網頁?✅ 可以操作(例如 document.getElementById)❌ 不能操作網頁元素❌ 不能操作網頁元素
能否直接操作伺服器?❌ 不行,通常只能向伺服器發送請求✅ 可以直接開伺服器(例如 Express.js)✅ 可以直接開伺服器(例如 Django、Flask)
能否讀寫本地檔案?❌ 不行,為了安全性禁止✅ 可以(使用 fs 模組)✅ 可以(使用 open() 函式)
典型用途做出動態網頁、SPA網站寫API伺服器、批次任務、自動化腳本資料分析、網站後端、自動化腳本、AI應用

從上面的表格可以看到:

  • 瀏覽器環境
    最適合用來處理「網頁畫面」和「使用者互動」,但不能直接操作本地硬碟或開伺服器。
  • Node.js 環境
    是給 JavaScript 用來在「伺服器」上跑的,沒有畫面控制功能,但可以讀寫硬碟、架網站。
  • Python 執行器
    則是一個很萬用的環境,既可以寫小腳本,也可以開伺服器,還可以做資料分析、機器學習等用途。

✅ 因此,一段程式碼要能正確運作,除了要「寫對語法」,還要確保:

  • 你所在的執行環境,有提供你需要用到的功能!

實際例子對比

最後,用一個具體的小例子,加深理解:

🔵 在瀏覽器中想要讀取一個按鈕的文字,可以這樣寫:

let text = document.getElementById('myButton').innerText;
console.log(text);
  • 這裡使用了 document,是瀏覽器環境特有的功能。
  • 如果你把這段程式丟到 Node.js 直接跑,會馬上錯誤,因為 Node.js 裡根本沒有 document

🔵 在Node.js中讀取一個本地檔案,可以這樣寫:

const fs = require('fs');
const content = fs.readFileSync('data.txt', 'utf8');
console.log(content);
  • fs 是 Node.js 特有的模組,負責操作檔案系統。
  • 如果你把這段程式丟到瀏覽器跑,會出錯,因為瀏覽器根本沒有 fs 這個東西!

結論

  • 不同執行環境支援的功能不同,要選對工具!
  • 同一種程式語言,在不同環境下能做的事情也會不一樣!
  • 理解執行環境的差異,是成為真正能自由開發的工程師的基礎!

✅ 簡單記住:

「程式是語言,執行環境是舞台。不同的舞台,演出的內容自然也不同!」

Similar Posts