R、Python 與 JavaScript 的全域變數與區域變數比較:從基礎概念到修改技巧

更新 發佈閱讀 5 分鐘

程式設計中,變數的作用域(Scope) 是每位開發者都應熟悉的重要概念。不同語言在變數的可見範圍與修改規則上各有不同,理解這些差異有助於避免意外的錯誤與除錯困難。本文將帶你比較三種常見語言——R、PythonJavaScript——在全域與區域變數上的行為,並展示各自修改全域變數的正確方式。


一、基本概念:什麼是全域與區域變數?

  • 全域變數(Global Variable):在程式的所有區塊中都可被存取與使用。
  • 區域變數(Local Variable):只存在於函式或區塊內,外部無法直接存取。

雖然概念相同,但三種語言在作用域的細節與修改規則上存在顯著差異。


二、R 語言中的變數作用域

R 採用 詞法作用域(Lexical Scoping)。當你在函式中使用變數時,R 會沿著「函式的定義位置」向外尋找變數,而非呼叫位置。

範例:區域與全域變數

x <- 10  # 全域變數

add_five <- function() {
x <- 5 # 區域變數
x + 5
}

add_five() # 輸出 10
x # 全域仍是 10

修改全域變數的方法

若要在函式中修改全域變數,需使用 <<- 運算子

x <- 10

add_global <- function() {
x <<- x + 5 # 修改全域變數
}

add_global()
x # 現在為 15
💡 小技巧:<<- 會往上層環境尋找同名變數並修改它,若找不到會在全域環境中建立新變數。

三、Python 的變數作用域

Python 使用 LEGB 規則(Local → Enclosing → Global → Built-in) 來決定變數搜尋的順序。

範例:區域變數遮蔽全域變數

x = 10  # 全域變數

def add_five():
x = 5 # 區域變數
return x + 5

print(add_five()) # 10
print(x) # 全域仍是 10

修改全域變數的方法

若要在函式內修改全域變數,需使用 global 關鍵字

x = 10

def add_global():
global x
x = x + 5

add_global()
print(x) # 15
⚠️ 注意:若沒有使用 global,Python 會自動將函式內的同名變數視為新的區域變數。

四、JavaScript 的變數作用域

JavaScript 在 ES6 之後區分了三種宣告方式:varletconst,其中:

  • var函式作用域(function scope)
  • letconst 則有 區塊作用域(block scope)

範例:全域與區域變數

var x = 10;  // 全域變數

function addFive() {
let x = 5; // 區域變數
return x + 5;
}

console.log(addFive()); // 10
console.log(x); // 10

修改全域變數的方法

在函式中,若想修改全域變數,直接操作同名變數即可(只要不是用 letconst 重新宣告):

var x = 10;

function addGlobal() {
x = x + 5; // 修改全域變數
}

addGlobal();
console.log(x); // 15

但若使用 letconst 定義在模組中(如 Node.js 環境),全域變數不會自動掛在 windowglobalThis,此時可明確使用:

globalThis.x = 10;

function addGlobal() {
globalThis.x += 5;
}

addGlobal();
console.log(globalThis.x); // 15

五、三者比較總覽

raw-image



六、結語:理解作用域,避免意外錯誤

作用域的差異看似細微,但卻是程式邏輯中極易出錯的部分。

    • R 中,請小心使用 <<-,避免意外改動父層變數;
    • Python 中,別忘了 global 關鍵字;
    • JavaScript 中,謹慎選擇 varletconst,確保作用域清晰。

掌握這些細節,你將能寫出更穩定、可預測且易於維護的程式。









留言
avatar-img
留言分享你的想法!
avatar-img
慵懶貓系的小墨魚:數據外的日常觀察
2會員
39內容數
小墨魚,一位白天擅長資料分析與統計建模的數據工作者,夜裡則沉浸在書本與文字裡,透過閱讀與寫作與世界對話。工作之餘,也兼職統計家教,協助學生理解複雜的統計概念與軟體操作。這裡記錄我的書評、生活觀察、科技碎念,有時也寫下關於時間與情緒的小片段。願這些文字,成為我們在日常中相遇的溫柔片刻。
2025/09/28
想告別 Anaconda 的臃腫與 requirements.txt 的版本衝突嗎?這篇文章將帶你認識 pyenv、Poetry、pipx,這三個業界主流的 Python 環境管理神器。透過簡單易懂的「廚房比喻」,帶你用最專業、最輕巧的方式,徹底解決開發痛點,讓你的程式碼之路從此順暢無阻。
Thumbnail
2025/09/28
想告別 Anaconda 的臃腫與 requirements.txt 的版本衝突嗎?這篇文章將帶你認識 pyenv、Poetry、pipx,這三個業界主流的 Python 環境管理神器。透過簡單易懂的「廚房比喻」,帶你用最專業、最輕巧的方式,徹底解決開發痛點,讓你的程式碼之路從此順暢無阻。
Thumbnail
2025/09/28
在現代網站架構中,Nginx 幾乎是後端工程師必備的工具。它不僅是一個高效能的網頁伺服器,更常被用作 反向代理伺服器,協助網站應付龐大的流量、保護內部架構,甚至提升安全性與效能。但在深入 Nginx 之前,我們先來理解一個核心觀念:為什麼叫「反向代理」,而不是「正向代理」?
Thumbnail
2025/09/28
在現代網站架構中,Nginx 幾乎是後端工程師必備的工具。它不僅是一個高效能的網頁伺服器,更常被用作 反向代理伺服器,協助網站應付龐大的流量、保護內部架構,甚至提升安全性與效能。但在深入 Nginx 之前,我們先來理解一個核心觀念:為什麼叫「反向代理」,而不是「正向代理」?
Thumbnail
2025/09/27
想像一下你要從臺北運送一批貨物到高雄,你可以選擇高鐵、火車、卡車,或是自己開車。每種方式都是「運輸」,但它們的工具、路線和效率完全不同。 網站後端語言也是一樣,它們的目的都是「處理資料與回應請求」,但採用的工具和運行方式各有特色,這就是所謂的 「生態環境」(Ecosystem)。 一、 四大後端
Thumbnail
2025/09/27
想像一下你要從臺北運送一批貨物到高雄,你可以選擇高鐵、火車、卡車,或是自己開車。每種方式都是「運輸」,但它們的工具、路線和效率完全不同。 網站後端語言也是一樣,它們的目的都是「處理資料與回應請求」,但採用的工具和運行方式各有特色,這就是所謂的 「生態環境」(Ecosystem)。 一、 四大後端
Thumbnail
看更多
你可能也想看
Thumbnail
覺得黏在額頭上的"條碼瀏海"很阿雜嗎?日本熱銷的「KOIZUMI迷你瀏海梳」,不僅小巧便攜,更能快速加熱造型,無論是齊瀏海、空氣瀏海還是韓系碎蓋髮,都能輕鬆打理!瀏海順了,一整天心情就好了!
Thumbnail
覺得黏在額頭上的"條碼瀏海"很阿雜嗎?日本熱銷的「KOIZUMI迷你瀏海梳」,不僅小巧便攜,更能快速加熱造型,無論是齊瀏海、空氣瀏海還是韓系碎蓋髮,都能輕鬆打理!瀏海順了,一整天心情就好了!
Thumbnail
走完朝聖之路和TMB後,我發現真正能撐住長時間健行的,不只是腳力,而是那些讓生活更舒服的小物。這篇整理了我在TMB實測後覺得超好用的三樣登山神器——防水襪、肥皂袋、速乾毛巾,每一樣都讓旅程更輕鬆!
Thumbnail
走完朝聖之路和TMB後,我發現真正能撐住長時間健行的,不只是腳力,而是那些讓生活更舒服的小物。這篇整理了我在TMB實測後覺得超好用的三樣登山神器——防水襪、肥皂袋、速乾毛巾,每一樣都讓旅程更輕鬆!
Thumbnail
介紹pygame支援的向量運算,以及向量的減法、乘法、除法實際上是怎麼計算的。
Thumbnail
介紹pygame支援的向量運算,以及向量的減法、乘法、除法實際上是怎麼計算的。
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
Thumbnail
本文介紹了各種運算符的用法和優先級,包括算術運算符、比較運算符、賦值運算符、邏輯運算符、位元運算符、成員運算符和身份運算符。每種運算符都有詳細的描述和示例程式碼,幫助理解其功能和用法。
Thumbnail
本文介紹了各種運算符的用法和優先級,包括算術運算符、比較運算符、賦值運算符、邏輯運算符、位元運算符、成員運算符和身份運算符。每種運算符都有詳細的描述和示例程式碼,幫助理解其功能和用法。
Thumbnail
本文詳細介紹了Python中的各種資料型別,包括整數、字串、清單、元組、集合和字典,並提供了相關的操作範例。此外,還解釋了如何在Python中定義和操作變數,包括如何同時對多個變數進行賦值。
Thumbnail
本文詳細介紹了Python中的各種資料型別,包括整數、字串、清單、元組、集合和字典,並提供了相關的操作範例。此外,還解釋了如何在Python中定義和操作變數,包括如何同時對多個變數進行賦值。
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
邏輯運算子 它們在許多情境下都是程式語言中重要的工具,用於進行條件判斷和控制流程 在日常中總會遇到有些需要思考判斷的問題,比如要買東西,就會考慮到CP值,東西要好且要便宜,就是and的概念,如果在一些比較複雜的狀況,例如想晚餐吃什麼,就會想火鍋或燒烤都行,這就是or的概念。
Thumbnail
邏輯運算子 它們在許多情境下都是程式語言中重要的工具,用於進行條件判斷和控制流程 在日常中總會遇到有些需要思考判斷的問題,比如要買東西,就會考慮到CP值,東西要好且要便宜,就是and的概念,如果在一些比較複雜的狀況,例如想晚餐吃什麼,就會想火鍋或燒烤都行,這就是or的概念。
Thumbnail
宣告變數 變數是程式中用來儲存和表示數據的標識符號​,並將變數存放在某個記憶體位子 可以用ID的方法查找變數存在哪個記憶體,此方法有利於以後查找問題用。 在大多數程式語言中,變數需要事先聲明(宣告)並賦值。 而Python是一種動態類型語言,不需要顯式宣告變數類型,而是在賦值時自動進行推斷。
Thumbnail
宣告變數 變數是程式中用來儲存和表示數據的標識符號​,並將變數存放在某個記憶體位子 可以用ID的方法查找變數存在哪個記憶體,此方法有利於以後查找問題用。 在大多數程式語言中,變數需要事先聲明(宣告)並賦值。 而Python是一種動態類型語言,不需要顯式宣告變數類型,而是在賦值時自動進行推斷。
Thumbnail
在Python中,有三種變數作用域:全域、區域和封閉。 區域作用域(Local Scope): 在函式內部定義的變數具有區域作用域,它們只能在該函式內部訪問。 例如: def my_function(): local_variable = 10
Thumbnail
在Python中,有三種變數作用域:全域、區域和封閉。 區域作用域(Local Scope): 在函式內部定義的變數具有區域作用域,它們只能在該函式內部訪問。 例如: def my_function(): local_variable = 10
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News