JavaScript 變數
變數是指向識別符的字面值,因此您可以在程序中引用並使用它。了解如何使用 JavaScript 声明一个变量。
JavaScript 變數介紹
變數是指向識別符的字面值,因此您可以在程序中引用並使用它。
JavaScript 中的變數沒有任何附加的類型。一旦您將特定的字面值類型分配給變量,您可以稍後將變量重新分配給任何其他類型,而不會出現類型錯誤或任何問題。
這就是為什麼有時會將 JavaScript 稱為“未命名”的原因。
在使用變量之前,必須先聲明變量。有三種方式可以實現這一點,使用 var
,let
或 const
,而這三種方式在稍後與變量互動方面有所不同。
使用 var
在 ES2015 之前,var
是定義變量的唯一構造。
1 | var a = 0 |
如果忘記添加 var
,就會將值分配給未聲明的變量,結果可能會有所不同。
在開啟嚴格模式的現代環境中,您將收到一個錯誤。在較舊的環境中(或在未開啟嚴格模式的情況下),這將初始化該變量並將其分配給全局對象。
如果在聲明變量時未初始化該變量,則該變量將具有 undefined
的值,直到您將值分配給它。
1 | var a //typeof a === 'undefined' |
您可以多次重新聲明變量以覆蓋它:
1 | var a = 1 |
您也可以在同一語句中同時聲明多個變量:
1 | var a = 1, b = 2 |
作用域是變量可見的代碼部分。
使用 var
在任何函數外部初始化的變量將被分配給全局對象,具有全局作用域並且在任何地方都可見。使用 var
在函數內部初始化的變量將分配給該函數,具有局部作用域並且僅在其中可見,就像函數參數一樣。
在具有相同名稱的全局變量的函數中定義的任何變量將優先於全局變量,遮蔽它。
重要的是要理解,塊(由一對花括號識別)不定義新的作用域。只有在創建函數時才會創建新的作用域,因為 var
沒有塊作用域,而是函數作用域。
在函數內部,無論變量是否在函數結尾處聲明,該變量在整個函數代碼中都是可見的,即使在開始時可以引用該變量,因為 JavaScript 在執行代碼之前實際上會將所有變量移動到頂部(這被稱為提升)。為避免混淆,請始終在函數開始時聲明變量。
使用 let
let
是 ES2015 中引入的一個新功能,它本質上是帶有塊作用域的 var
的版本。它的作用域僅限於定義它的塊,語句或表達式以及其中包含的所有內部塊。
現代 JavaScript 開發人員可能選擇僅使用 let
,並完全放棄使用 var
。
如果
let
看起來很晦澀難懂,只需將let color = 'red'
讀作 讓顏色為紅色,一切都會更加清晰明了
在任何函數之外定義 let
- 與 var
相反 - 不創建全局變量。在頂層使用 var
定義的全局變量(在瀏覽器中)將添加到 window
對象中。在塊之外(但仍然在應用程序代碼中)使用的 let
(和 const
)聲明仍然創建一個可在整個應用程式代碼中可用的變量,但不會分配給 window
。
使用 const
使用 var
或 let
声明的變量可以在程序中稍後更改並重新分配。一旦初始化了 const
,它的值就永遠無法再次更改,並且無法重新分配為不同的值。
1 | const a = 'test' |
我們無法將不同的字面值分配給 a
常量。但是,如果 a
是一個提供了修改其內容的方法的對象,我們可以更改 a
。
const
不提供不可變性,只是確保引用不可更改。
const
具有塊作用域,與 let
相同。
現代 JavaScript 開發人員可能選擇始終使用 const
用於在程序中稍後不需要重新分配的變量。
為什麼?因為我們應該始終使用最簡單的構造來避免未來出錯。
tags: [“JavaScript”, “variables”, “var
“, “let
“, “const
“, “scope”, “block scope”, “hoisting”, “immutability”]