const
const 宣告後的值不能直接被改變的。
//這樣直接改值會顯示錯誤
const a = 10
a = 20
console.log(a)
將會印出10
如果利用 const 宣告陣列或物件,則可以被改變,以下例子我們可以想像 b
裡面存的是某個值的記憶體位址,所以更改物件或陣列的值其實只是更改記憶體位址,指向其他的值。這裡牽涉到 JS 最底層的運作方法。
//陣列及物件改變是可以的,其實不是改變值,是改變指向哪一個記憶體位址
const b = {
number : 10
}
b.number = 20
console.log(b)
將會印出{number : 20}
var 和 let 的作用域差別
ver 的作用域比 let 還要廣,var 的作用域是一個 function,而 let 則是一個 block。
//使用 var 在整個 function 都可以使用 c 變數
function test() {
if (10 > 5){
var c = 10
}
console.log(c)
}
test()
將會印出10
//使用 let 在整只有在 if 中可以使用 c 變數
function test() {
if (10 > 5){
let c = 10
}
console.log(c)
}
test()
將會顯示找不到 c 變數
那 const 的作用域呢
const 的作用域跟 let 一樣只在 block 中使用,差別只在於 const 不可改值,let 和 var 是可以隨時改值的。
最後進行一下表格整理
const | let | var |
---|---|---|
block | block | function |
不可改值 | 可改值 | 可改值 |