傳統用法的 var
和ES6標準新增的 let
及const
,到底三個有什麼差別?好像都可以用又好像哪裡不對?
var
是在ES6前唯一宣告變數的方法,至今為止在許多實作專案或網頁等都還是會看到 var
,表面上 var
和 let
的使用上是沒有太多差異,但在實務上 var
可能會造成不同區域的變數互相汙染的狀況,進而產生許多程式碼管理的問題,所以ES6加入 let
和 const
主要的原因之一可以說是為了減少因為 var
而產生的問題,並且在讓撰寫及運用變數上可以更為謹慎及安全。
var x = 0
if (true) {
var x = 1 // 重複宣告
console.log(x) // 1
}
console.log(x) // 1 <-- 受到重複宣告影響而導致無論在區塊內或外的x都變成1
let
即是自ES6以來主要使用於宣告變數的方法,而使用 let
宣告的變數也代表該資料是可以被重新賦值或是進行改變,舉例來說,我們先宣告fruit為apple,假如今天不想要apple了,可以將fruit重新賦值為orange,這時輸出fruit得到的結果將會是orange。
let fruit = 'apple'
console.log(fruit) // apple
fruit = 'orange'
console.log(fruit) // orange
但同樣是宣告變數,var
和 let
差在哪裡?用 var
一樣的例子改用 let
宣告試看看
let x = 0
if (true) {
let x = 1
console.log(x) // 1
}
console.log(x) // 0
這時會發現使用 let
宣告時,區塊內的x不會影響到區塊外的x,也就不會發生使用 var
宣告時區塊內外的變數會相互影響的問題。
const
也是從ES6開始使用,而他與 let
最大的不同在於 const
是用於宣告”常數”,常數是什麼呢?其實就是不能改變的資料,也就是說被 const
宣告出來的常數,是不能像 let
宣告出來的變數一樣進行重新賦值,所以當確定資料不會進行改動時,就很適合使用 const
來宣告啦!
const PI = 3.14
console.log(PI) // 3.14
PI = 3.15
console.log(PI) // TypeError: Assignment to constant variable.