變量的作用域是程序在其中定義的區(qū)域。
JavaScript變量只有兩個作用域:
局部作用域
全局作用域
作用域確定變量的可訪問性(可見性)。
在函數(shù)中聲明的變量具有LOCAL(局部)作用域,這意味著無法從該函數(shù)外部調用或操作它們。
// 這里的代碼不能使用cityName
function myFunc() {
var cityName = "New Delhi";
// 這里的代碼可以使用cityName
}
// 這里的代碼不能使用cityName測試看看?/?局部變量具有函數(shù)作用域,只能從函數(shù)內部訪問它們。
由于局部變量只能在其函數(shù)內部識別,因此具有相同名稱的變量可以在不同的函數(shù)中使用。
函數(shù)啟動時創(chuàng)建局部變量,函數(shù)完成時將局部變量刪除。
在函數(shù)外部的程序中聲明的變量具有GLOBAL范圍,這意味著所有腳本都可以使用它們,無論該腳本在函數(shù)內部還是外部。
// 初始化全局變量
var cityName = "New Delhi";
// 這里的代碼能使用cityName
function myFunc() {
// 這里的代碼同樣也能使用cityName
}
// 這里的代碼能使用cityName測試看看?/?可以從JavaScript程序中的任何位置訪問全局變量。
在下面的示例中,我們將創(chuàng)建一個GLOBAL cityName變量。函數(shù)內部是一個具有相同名稱的LOCAL變量。
// 初始化全局變量
var cityName = "New Delhi";
function myFunc() {
//初始化局部、函數(shù)范圍內的變量
var cityName = "Jaipur";
document.writeln(cityName);
}
//輸出全局變量和局部變量
document.writeln(cityName);
myFunc();
document.writeln(cityName);測試看看?/?通過將它們輸出到文檔,我們可以看到變量的值根據(jù)作用域而有所不同,并且原始值沒有更改。
如果為尚未聲明的變量賦值,它將自動成為GLOBAL(全局)變量。
此示例將聲明全局變量cityName,即使在函數(shù)內部分配了值也是如此。
myFunc();
// 這里的代碼能使用cityName
function myFunc() {
cityName = "New Delhi";
}測試看看?/?除非有必要,否則不要輕易創(chuàng)建全局變量。
全局變量可以覆蓋窗口變量。
任何函數(shù),包括window對象,都可以覆蓋GLOBAL變量。
JavaScript具有三個不同的關鍵字來聲明變量,這為語言增加了一層復雜性。
兩者之間的差異基于范圍,提升和重新分配。
| 關鍵詞 | 范圍 | 提升 | 可以重新分配 | 可以重新聲明 |
|---|---|---|---|---|
| var | 函數(shù)作用域 | 是 | 是 | 是 |
| let | 塊作用域 | 否 | 是 | 否 |
| const | 塊作用域 | 否 | 否 | 否 |
用var關鍵字聲明的變量不能具有塊作用域。
{}可以從塊外部訪問在塊內部聲明的變量:
{
var num = 50;
}
// num 能在這里使用用let關鍵字聲明的變量可以具有“塊作用域”。
{}不能從塊外部訪問在塊內部聲明的變量:
{
let num = 50;
}
// num不能在這里使用 {
const num = 50;
}
// num不能在這里使用常量的值不能通過重新分配而更改,也不能重新聲明。
JavaScript變量的生命周期從聲明開始。
函數(shù)完成后,將刪除局部變量。
當您關閉瀏覽器窗口時,全局變量將被刪除,但對于加載到同一窗口中的新頁面仍然可用。