跳去內容

作用域

出自維基百科,自由嘅百科全書

作用域(英文: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 若果喺 { } 入便使用,會自動設定成以嗰對括號為作用域。

睇埋

[編輯]

引咗

[編輯]
  1. ↑ "Report on the Algorithmic Language Algol 60", 2.7. Quantities, kinds and scopes
  2. ↑ Scope, Rebus
  3. ↑ A brief explanation of program memory and C++ memory management. Medium.
  4. 1 2 Sethi 1989, p. 122.
  5. ↑ "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.

註釋

[編輯]
  1. ↑ 或者第啲編程員自訂嘅識別碼
  2. ↑ 英文:function scope

書目

[編輯]

拎

[編輯]