初學者指南:什麼是 Runtime 執行環境?
更新日期: 2025 年 4 月 26 日
本文為 Node.js 基礎,第 1 篇:
什麼是程式?
簡單定義:給電腦的「指令清單」
程式(program)就是一串給電腦的指令清單。
這些指令告訴電腦該做什麼事情、按照什麼順序做。
✅ 你可以想像程式就像是:
- 食譜(告訴你一步步怎麼做蛋糕)
- 組裝說明書(一步步教你組一張桌子)
- 導航指示(一步步告訴你要怎麼走到目的地)
電腦本身很厲害,但它完全不會自己想事情。
必須有人(程式設計師)告訴它每個小步驟,它才知道該怎麼做。
程式由什麼組成?
一個程式通常是由很多行的指令(code)組成的,這些指令會包含:
- 資料:要處理的東西(比如一個名字、一個數字)
- 操作:要對資料做什麼事(比如加起來、比較大小、顯示出來)
- 流程控制:決定下一步要做什麼(比如如果分數超過60分就顯示「及格」)
舉個超簡單的例子:
(這是一個「計算加總」的小程式)
let a = 5;
let b = 7;
let total = a + b;
console.log(total);
這個程式告訴電腦:
- 把 5 存到 a 裡
- 把 7 存到 b 裡
- 把 a 和 b 加起來,存到 total 裡
- 把 total 的結果印出來
所以電腦最後就會印出 12
。
什麼是執行環境?
簡單定義:程式運作時的「工作空間」
當你寫好一個程式以後,電腦還需要一個地方來「執行」這些指令。
這個地方,就是我們說的「執行環境(execution environment)」。
✅ 可以把執行環境想成一個:
- 教室(讓學生有地方上課)
- 廚房(讓廚師能夠煮菜)
- 工廠(讓工人能夠生產產品)
你的程式就像是工人,而執行環境就是工廠本身,裡面會提供必須的資源,讓工人(程式)可以順利工作。
執行環境是做什麼的?
當程式開始執行時,電腦會建立一個「執行環境」,這個環境會幫忙做幾件非常重要的事情:
記錄資料
- 幫你保管變數和值,例如:記住
a = 5
、b = 7
這些資訊。
管理操作
- 控制程式執行的流程,例如:遇到
console.log(total)
時要顯示結果。
提供工具
- 預先準備一些常用的功能,像是數學計算、印出資料、跟外界溝通的能力。
✅ 小提醒:如果沒有執行環境,程式就算寫好了,也根本「沒地方可以跑」,會像無家可歸的指令一樣,什麼都做不了!
更具體一點:執行環境裡面長什麼樣子?
可以想像執行環境裡會有很多「小格子」,每個格子負責一個綁定(binding)。
例如:
名稱 | 資料 |
---|---|
a | 5 |
b | 7 |
total | 12 |
console | 一個可以印出文字的功能 |
當你的程式說 console.log(total)
的時候,電腦就會:
- 先在這個環境裡找到
console
這個名字,拿出「印出文字」這個功能。 - 再找到
total
這個名字,拿到12
這個數字。 - 然後執行印出
12
的動作。
✅ 這個過程,全部都是靠執行環境來完成的。
為什麼每種程式語言都需要執行環境?
程式本身只是「死的文字」
首先要理解一件事情:
- 程式碼(像是 JavaScript、Python、C++ 這些)本質上只是文字。
- 如果只是把程式碼寫在電腦裡,電腦是看不懂也做不了任何事的。
✅ 電腦不會自動懂「let a = 5」是什麼意思,它只會當成一堆亂碼看待。
執行環境是「解讀指令」+「提供支援」的地方
為了讓這些死的文字變成可以運作的東西,需要兩件事:
- 有人懂得讀這些指令(翻譯成電腦能理解的語言)
- 有人準備好基本功能和工具(像記憶資料、做數學運算、印出結果等等)
這個「有人」指的就是——執行環境(execution environment)!
✅ 簡單來說:
執行環境是負責「翻譯程式指令+提供執行資源」的超級助理。
沒有它,程式就只是一堆靜靜躺在檔案裡的文字,永遠跑不起來。
為什麼每種語言都要自己準備執行環境?
因為不同程式語言,講的是不同的「語言」!
舉例來說:
- JavaScript 的
console.log('Hello')
- Python 的
print('Hello')
- C++ 的
std::cout << "Hello";
雖然這些指令都是「把文字印出來」,但是寫法完全不一樣!
✅ 所以,每種程式語言:
- 需要有自己專門的環境,能夠正確理解它的語法。
- 必須提供符合該語言標準的工具、函式和行為。
比如:
語言 | 專用執行環境範例 |
---|---|
JavaScript | 瀏覽器(Chrome, Firefox)或 Node.js |
Python | Python 直譯器(CPython, PyPy) |
C++ | 編譯器 + 作業系統支援 |
每種語言,都有自己專屬的「翻譯員」和「工具箱」。
如果沒有執行環境,會發生什麼事?
如果沒有執行環境,程式就會:
- 無法被解讀(電腦不知道這些指令要做什麼)
- 無法保管資料(像 a=5 這樣的值也無法儲存)
- 無法進行互動(例如你打開網頁點按鈕,什麼事都不會發生)
✅ 簡單說:
沒有執行環境,程式=廢紙。
電腦只會傻傻地看著一堆無意義的文字,什麼行動也不會有。
執行環境有哪些重要特性?
當程式在運作時,執行環境會負責管理一切讓程式可以順利執行的資源和行為。
這個環境本身有幾個很重要的特性,每一個特性都直接影響程式能不能正常運作。
包含綁定(Binding)
在執行環境裡,最基本的一件事情就是:
將「名稱」和「實際的資料或功能」連在一起,這個動作叫做「綁定」。
✅ 比如說:
let name = 'Tom';
這裡的 name
這個名字,綁定到 'Tom'
這個資料上。
✅ 執行環境會記錄下這些綁定,讓你的程式在後面可以透過名字,隨時取出或操作資料。
提供互動的管道與手段(Interaction Mechanisms)
除了管理「自己內部的資料」以外,執行環境還有另一個很重要的功能:
讓程式能跟「外界」互動。
什麼叫「外界」?
- 使用者(比如滑鼠點擊、鍵盤輸入)
- 網路(比如請求伺服器資料)
- 檔案系統(比如讀取或儲存檔案)
- 其他裝置(像是印表機、相機)
✅ 舉例來說,如果你的程式想要:
- 讀取使用者輸入的帳號密碼
- 把資料送到一台遠端伺服器
- 顯示一張從網路下載下來的圖片
這些事情不是靠單純的程式指令就能完成,而是要透過執行環境提供的管道(API、方法)來達成。
如果沒有這些互動的手段,程式就會變成一個只能自己計算數字、什麼事也不能對外做的「孤島」。
執行環境的常見例子
瀏覽器中的執行環境
最常見、最熟悉的執行環境,就是「瀏覽器」!
當你開啟 Chrome、Firefox、Safari 的時候,瀏覽器會自動幫你建立一個 JavaScript 的執行環境。
這個環境裡面已經內建了很多功能,幫助你的程式跟使用者、網路互動。
✅ 例如瀏覽器提供的功能包括:
- 事件監聽器(Event Listener):
讓你的程式能夠偵測使用者的操作,例如滑鼠點擊、鍵盤輸入。 - 網路請求(Network Request):
讓你的程式可以透過fetch
或XMLHttpRequest
去跟伺服器拿資料。 - 計時器功能(Timers):
讓你可以使用setTimeout
或setInterval
,設定延遲執行或重複執行的動作。 - DOM 操作(Document Object Model):
讓你的程式可以動態改變網頁上的內容,例如新增一個按鈕,改變文字等等。
瀏覽器執行環境帶來的互動例子
有了這些內建功能,你的網頁程式就可以做到:
- 點擊按鈕,觸發一個事件(例如:彈出一個提示框)
- 填寫表單,把資料送到伺服器(例如:登入系統)
- 自動從後端載入新的資料並更新畫面(例如:看到新的貼文出現)
✅ 小提醒:
這些功能並不是「原生 JavaScript」本身就擁有的,而是瀏覽器這個執行環境額外提供的功能!
如果你單純把 JavaScript 程式碼拿到別的環境(比如 Node.js),那些像是 document
、window
的東西就會消失,因為那已經不是瀏覽器了!
不同執行環境的差異
雖然「執行環境」這個概念在各種程式語言裡都是共通的,但不同的平台、不同的語言,實際提供的功能和資源卻差異很大!
為了幫助理解,我們可以從三個常見的執行環境來比較:
項目 | 瀏覽器(Browser) | Node.js | Python 執行器 |
---|---|---|---|
使用語言 | JavaScript | JavaScript | Python |
主要目標 | 操作網頁、互動式內容 | 操作伺服器、後端程式 | 廣泛用途(科學運算、網頁後端、腳本) |
提供的互動功能 | 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
這個東西!
結論
- 不同執行環境支援的功能不同,要選對工具!
- 同一種程式語言,在不同環境下能做的事情也會不一樣!
- 理解執行環境的差異,是成為真正能自由開發的工程師的基礎!
✅ 簡單記住:
「程式是語言,執行環境是舞台。不同的舞台,演出的內容自然也不同!」