JavaScript 作用域
作用域決定了變數的可訪問性(可見性)。
JavaScript 變數有 3 種作用域
- 塊作用域
- 函式作用域
- 全域性作用域
塊作用域
在 ES6 (2015) 之前,JavaScript 變數只有全域性作用域和函式作用域。
ES6 引入了兩個重要的 JavaScript 新關鍵字:let
和 const
。
這兩個關鍵字在 JavaScript 中提供了塊作用域。
在 { } 塊內宣告的變數不能從塊外訪問
示例
{
let x = 2;
}
// 此處不能使用 x
使用 var
關鍵字宣告的變數不能具有塊作用域。
在 { } 塊內宣告的變數可以從塊外訪問。
示例
{
var x = 2;
}
// 此處可以使用 x
區域性作用域
在函式內宣告的變數對該函式是區域性的
示例
// 此處的程式碼不能使用 carName
function myFunction() {
let carName = "Volvo";
// 此處的程式碼可以使用 carName
}
// 此處的程式碼不能使用 carName
自己動手試一試 »
區域性變數具有函式作用域
它們只能在函式內部訪問。
由於區域性變數只能在其函式內識別,因此不同函式可以使用同名變數。
區域性變數在函式開始時建立,並在函式完成時刪除。
函式作用域
JavaScript 具有函式作用域:每個函式都會建立一個新的作用域。
在函式內部定義的變數無法從函式外部訪問(可見)。
使用 var
、let
和 const
宣告的變數在函式內部宣告時非常相似。
它們都具有函式作用域
function myFunction() {
var carName = "Volvo"; // 函式作用域
}
function myFunction() {
let carName = "Volvo"; // 函式作用域
}
function myFunction() {
const carName = "Volvo"; // 函式作用域
}
全域性 JavaScript 變數
在函式外部宣告的變數會變成全域性變數。
示例
let carName = "Volvo";
// 此處的程式碼可以使用 carName
function myFunction() {
// 此處的程式碼也可以使用 carName
}
自己動手試一試 »
全域性變數具有全域性作用域
網頁上的所有指令碼和函式都可以訪問它。
全域性作用域
全域性宣告的變數(任何函式外部)具有全域性作用域。
全域性變數可以從 JavaScript 程式的任何位置訪問。
在塊外部宣告的變數(使用 var
、let
和 const
)非常相似。
它們都具有全域性作用域
var x = 2; // 全域性作用域
let x = 2; // 全域性作用域
const x = 2; // 全域性作用域
JavaScript 變數
在 JavaScript 中,物件和函式也是變數。
作用域決定了變數、物件和函式在程式碼不同部分的可訪問性。
自動全域性
如果你給一個未宣告的變數賦值,它將自動成為全域性變數。
此程式碼示例將宣告一個全域性變數 carName
,即使該值是在函式內部賦值的。
嚴格模式
所有現代瀏覽器都支援在“嚴格模式”下執行 JavaScript。
在本教程的後續章節中,您將瞭解更多關於如何使用嚴格模式。
在“嚴格模式”下,未宣告的變數不會自動成為全域性變數。
HTML 中的全域性變數
使用 JavaScript,全域性作用域是 JavaScript 環境。
在 HTML 中,全域性作用域是 window 物件。
使用 var
關鍵字定義的全域性變數屬於 window 物件
使用 let
關鍵字定義的全域性變數不屬於 window 物件
警告
除非您打算這樣做,否則請勿建立全域性變數。
您的全域性變數(或函式)可能會覆蓋 window 變數(或函式)。
任何函式,包括 window 物件,都可以覆蓋您的全域性變數和函式。
JavaScript 變數的生命週期
JavaScript 變數的生命週期從宣告開始。
函式(區域性)變數在函式完成時被刪除。
在 Web 瀏覽器中,全域性變數在關閉瀏覽器視窗(或選項卡)時被刪除。
函式引數
函式引數(形參)在函式內部充當區域性變數。