理解範圍和詞法範圍是寫出高效且無錯誤的JavaScript程式碼的基礎。這些概念規定了變數的存取方式以及它們在程式碼中的可用位置。
Scope 指的是目前執行的上下文,它決定了變數的可見性和可訪問性。 JavaScript 有三種類型的作用域:
範例:
{ let a = 10; const b = 20; console.log(a, b); // Output: 10, 20 } console.log(a); // Error: a is not defined
範例:
function testFunctionScope() { if (true) { var x = 10; // Function-scoped } console.log(x); // Output: 10 } testFunctionScope();
範例:
var globalVar = "I am global"; console.log(globalVar); // Output: I am global
詞法作用域表示變數的作用域由其在原始碼中的位置決定。函數使用定義時的作用域鏈執行,而不是呼叫時的作用域鏈。
作用域鍊是 JavaScript 用來解析變數參考的作用域層次結構。如果在目前作用域中沒有找到變量,它將在外部作用域中查找,直到到達全域作用域。
範例:
function outer() { let outerVar = "I'm outer"; function inner() { console.log(outerVar); // Accesses the outer scope } inner(); } outer(); // Output: I'm outer
由於詞法作用域,內部函數可以存取其外部函數中的變數。
範例:
function outerFunction() { let outerVariable = "Outer"; function innerFunction() { let innerVariable = "Inner"; console.log(outerVariable); // Outer console.log(innerVariable); // Inner } innerFunction(); } outerFunction();
function createMultiplier(multiplier) { return function (value) { return value * multiplier; // Accesses 'multiplier' from outer scope }; } const double = createMultiplier(2); console.log(double(5)); // Output: 10
閉包依賴詞法作用域來記住外在環境中的變數。
範例:
function outerFunction() { let count = 0; return function () { count++; console.log(count); }; } const counter = outerFunction(); counter(); // Output: 1 counter(); // Output: 2
未使用 let、const 或 var 宣告的變數將成為全域變數。
{ let a = 10; const b = 20; console.log(a, b); // Output: 10, 20 } console.log(a); // Error: a is not defined
在區塊內使用 var 會導致意想不到的結果。
function testFunctionScope() { if (true) { var x = 10; // Function-scoped } console.log(x); // Output: 10 } testFunctionScope();
在巢狀作用域中宣告的變數可以隱藏(覆蓋)外部作用域中的變數。
var globalVar = "I am global"; console.log(globalVar); // Output: I am global
Scope | Lexical Scope |
---|---|
Refers to the context in which variables are accessible. | Refers to how the location of variables in the code determines scope. |
Can be global, block, or function. | Depends on the structure of the code when it is written. |
Dynamic during runtime. | Fixed during code definition. |
function outer() { let outerVar = "I'm outer"; function inner() { console.log(outerVar); // Accesses the outer scope } inner(); } outer(); // Output: I'm outer
掌握這些概念對於除錯和編寫有效的 JavaScript 程式碼至關重要。
嗨,我是 Abhay Singh Kathayat!
以上是掌握 JavaScript 中的作用域和詞法作用域的詳細內容。更多資訊請關注PHP中文網其他相關文章!