作用域
外表
作用域(英文:scope )係電腦程式編寫上嘅概念,講緊手上嘅變數[註 1]喺源碼嘅邊部份有效或者可讀取[1]。喺二十一世紀初,主流嘅程式語言都會用到作用域,而作用域嘅使用屬於寫程式嘅重要技巧[2][3]。
作用域可以分兩大類,分別叫詞法作用域[暫譯](lexical scope)同動態作用域[暫譯](dynamic scope)[4],前者指作用域嘅範圍可以直接由程式嘅詞法結構睇出,而後者係指作用域係根據程式嘅實際執行次序。現時主流嘅程式語言用嘅通常都係前者;傳統上會話後者嘅例子包括舊式嘅 Lisp[4],現時可能可以話 PostScript 都仲係屬於後者。
基本概念
[編輯]全域變數
[編輯]内文:全域變數
全域變數係喺程式嘅最頂層或者喺所有子程式外定義嘅變數,特點係由定義佢嗰一刻開始,直到程式結束為止,無論喺個程式邊個地方都有得讀取或者修改佢,包括所有子程式在內。
局部變數
[編輯]内文:局部變數
局部變數係喺子程式內部定義嘅變數,具有子程序級數嘅作用域[註 2][5]。特點係佢哋只可以喺定義佢哋嘅嗰個子程式(其作用域)內部使用。一旦子程式行完,呢啲變數通常就會由記憶體入便釋放返出嚟,唔再掗住啲記憶體。
用途
[編輯]將啲變數嘅作用域限定喺程式嘅某啲部份,有好多用途:
- 防止撞名:容許唔同部分嘅程式使用相同嘅變數名,而唔會因為撞名而出錯。
- 記憶體管理:喺多數程式語言中,局部變數只會喺需要嗰時先佔用空間,子程序行完就釋放返出嚟,唔再掗住啲記憶體。
- 程式碼安全:限制變數嘅存取權,防止程式第啲部分意外修改數據。
源碼例子
[編輯]以下係用 JavaScript 展示作用域區別嘅示範:
// 喺 function 出面定義,係全域變數
let globalVar = "我係 Global";
function exampleFunction() {
// 喺 function 入面定義,係局部變數
let localVar = "我係 Local";
console.log(globalVar); // 成功:讀到全域變數
console.log(localVar); // 成功:讀到局部變數
}
exampleFunction();
console.log(globalVar); // 成功
console.log(localVar); // 呢行會引致 error,因為喺呢度 localVar 係唔存在嘅。
JavaScript 有多個唔同嘅方法可以用嚟設定變數,每種方法都會自動決定該變數嘅作用域,例如 let 同 const 若果喺 { } 入便使用,會自動設定成以嗰對括號為作用域。
睇埋
[編輯]引咗
[編輯]- ↑ "Report on the Algorithmic Language Algol 60", 2.7. Quantities, kinds and scopes
- ↑ Scope, Rebus
- ↑ A brief explanation of program memory and C++ memory management. Medium.
- 1 2 Sethi 1989, p. 122.
- ↑ "Functions - Javascript:MDN". 23 April 2023.
Variables defined inside a function cannot be accessed from anywhere outside the function, because the variable is defined only in the scope of the function. However, a function can access all variables and functions defined inside the scope in which it is defined.
註釋
[編輯]書目
[編輯]- Sethi, Ravi (1989). Programming Languages (英文). Addison-Wesley.
拎
[編輯]- (中文)【JS 學習筆記】變數與作用域,Medium