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