JavaScript是一種動態(tài)類型語言,它有三種變量類型:var、let和const。這三種變量類型都有其獨特的特點,我們來詳細了解一下。
var 是ES5引入的變量聲明方式,是JavaScript中最常用、最傳統(tǒng)的一種聲明變量的方法。var 聲明的變量是函數(shù)級作用域。
var str = 'hello, world' if (true) { var str = 'hello, JavaScript' console.log(str) // 'hello, JavaScript' } console.log(str) // 'hello, JavaScript'
上面的代碼可以看到,if語句塊內(nèi)部重新聲明了str變量,這里的是最外層的str變量被改變了。因為var 聲明的變量是函數(shù)級作用域,不存在塊級作用域。
let 是ES6引入的變量聲明方式,let 聲明的變量是塊級作用域。
let str = 'hello, world' if (true) { let str = 'hello, JavaScript' console.log(str) // 'hello, JavaScript' } console.log(str) // 'hello, world'
上面的代碼,當if語句塊中聲明了與外部同名的str變量時,它會覆蓋外部的變量,但是這里的if語句塊中的變量str只會在花括號內(nèi)部存在,一旦離開花括號的作用域,變量就被銷毀了。
const 聲明的變量與 let 一樣是塊級作用域,但是它的值是不可變的。
const PI = 3.1415926 PI = 3 // TypeError: Assignment to constant variable.
上面的代碼將會拋出 TypeError。因為const 聲明的變量值是不可變的。但是const 聲明的變量不是完全不可變的,更準確來說是指它的指針地址不可變。
總結(jié)一下,當我們需要定義一個只在某個作用域內(nèi)應用的變量時,建議使用 let 聲明,而在函數(shù)中聲明變量時,無論如何都應該使用 var。用 const 聲明一個常量If you need to declare a variable that has a value that should never be changed, you should always use const.