var
、let
和 const
是 JavaScript 中用來宣告變數(常數)的關鍵字。在講解它們的特性之前,還是先來看一下它們的歷史:
var
var
是最早引入到 JavaScript 中的變數宣告關鍵字,它出現在 ECMAScript 1 (ES1) 中,於 1997 年發布。當時,JavaScript 主要用於網頁上的簡單互動,因此對於變數作用域的需求並不是很複雜。
然而由於var
存在作用域和變數提升等「較不直覺」的問題,容易導致不符合預期的行為,因此在後來的 ES 版本中,引入了let
和const
來解決這些問題。
let 和 const
let
和const
在 ECMAScript 6 (ES6) 中首次引入,於 2015 年發布。ES6 是 JavaScript 歷史上的一個重大更新,帶來了許多新的語言功能和改進。let
和const
的崛起主要是因為區塊作用域的特性,這改善了變數作用域的可控性,並幫助開發人員避免意外的變數提升問題。
也就是說 var
是最早引入 JavaScript 的變數宣告方式,但在後來 let
和 const
被引入後,var
已逐漸被取代,可謂是時代的眼淚。
但接下來我還是會介紹三者的特性,來看看它們有哪些特性和區別。
(關於作用域
和變數提升(hosting)
我會留到明天以後再詳談)
var | let | const | |
---|---|---|---|
引入時間 | ES1 | ES6 | ES6 |
作用域 | 函式作用域(Function scope) | 區塊作用域(Block scope) | 區塊作用域(Block scope) |
變數提升 | 是 |
否 | 否 |
宣告需給初始值 | 否 | 否 | 是 |
可重新宣告 | 是 |
否 | 否 |
可重新賦值 | 是 |
是 |
否 |
var
function example() {
var x = 10;
if (true) {
var x = 20; // 這將改變外部的 x 值
}
console.log(x); // 輸出 20
}
let
function example1() {
let x = 10;
if (true) {
let x = 20; // 這不會影響外部的 x 值
}
console.log(x); // 輸出 10
}
function example2() {
let x = 10;
if (true) {
x = 20; // 這會影響外部的 x 值
}
console.log(x); // 輸出 20
}
const
function example1() {
const x = 10;
if (true) {
const x = 20; // 這不會影響外部的 x 值
}
console.log(x); // 輸出 10
}
function example2() {
const x = 10;
if (true) {
x = 20; // 報錯
}
console.log(x); // 不會執行到該行
}
今天簡單介紹了 var
, let
, const
的特性與區別。目前來說在新專案開發時,推薦使用 let
和 const
,並盡量避免使用 var
,避免不必要的麻煩。而接下來應該會針對作用域
和變數提升(hosting)
來做較詳細的介紹。那我們明天見。