let
let 和 var 一樣, 也是是用來定義變量的。如
let a = 3
let 與 var 的區別
- let 定義的變量的作用域是代碼塊,var 定義的變量的作用域是函數。
- let 不存在變量提升。
- 不允許在相同作用域內,重復聲明同一個變量。
const
用 const 來定義常量。如
const PI = Math.PI
const 實際上保證的,并不是變量的值不得改動,而是變量指向的那個內存地址不得改動。對于簡單類型的數據(數值、字符串、布爾值),值就保存在變量指向的那個內存地址,因此等同于常量。但對于復合類型的數據(主要是對象和數組),變量指向的內存地址,保存的只是一個指針,const只能保證這個指針是固定的,至于它指向的數據結構是不是可變的,就完全不能控制了。因此,將一個對象聲明為常量必須非常小心。
如果想讓內容不能變,用 Object.freeze(obj)
。
為了讓代碼更健壯,盡可能的用 let 和 const 來定義變量。
函數的默認參數
function Point(x = 0, y = 0) {
this.x = x;
this.y = y;
}
const p = new Point();
p // { x: 0, y: 0 }
與解構賦值一起使用
function foo({x, y = 5} = {}) {
console.log(x, y);
}
foo() // undefined 5