範圍
作用域 (scope) 是當前執行的上下文,在該上下文中,值和表示式是“可見”的,或者可以被引用。如果一個變數或表示式不在當前作用域中,它將不可用。作用域也可以以層級的方式巢狀,子作用域可以訪問父作用域,但父作用域不能訪問子作用域。
JavaScript 具有以下幾種作用域:
- 全域性作用域:所有在指令碼模式下執行的程式碼的預設作用域。
- 模組作用域:在模組模式下執行的程式碼的作用域。
- 函式作用域:透過函式建立的作用域。
此外,使用特定語法宣告的識別符號,包括 let、const、class,或者(在嚴格模式下)function,可以屬於一個附加的作用域:
- 塊作用域:透過一對花括號(一個塊)建立的作用域。
一個函式會建立一個作用域,因此(例如)在函式內部定義的變數無法在函式外部或在其他函式內部訪問。例如,以下程式碼是無效的:
js
function exampleFunction() {
const x = "declared inside function"; // x can only be used in exampleFunction
console.log("Inside function");
console.log(x);
}
console.log(x); // Causes error
然而,由於變數在函式外部宣告,使其成為全域性變數,因此以下程式碼是有效的:
js
const x = "declared outside function";
exampleFunction();
function exampleFunction() {
console.log("Inside function");
console.log(x);
}
console.log("Outside function");
console.log(x);
塊作用域只作用於 let 和 const 宣告,而不作用於 var 宣告。
js
{
var x = 1;
}
console.log(x); // 1
js
{
const x = 1;
}
console.log(x); // ReferenceError: x is not defined