let的特性: const的特性: 凍結對象: ...
let的特性:
- 不存在變數提升現象:即聲明前使用,報ReferenceError。適用於for迴圈計數器。
- 暫時性死區:即在塊級作用域內使用let聲明變數,該變數只能在該作用域內使用。
- 不允許重覆聲明:let聲明過的變數不能再次聲明,否則報錯。
const的特性:
- 不存在變數提升現象。
- 暫時性死區。
- 不可重覆聲明。
- 聲明的是只讀常量,聲明時必須初始化。
- 本質保存的是記憶體地址,簡單類型數據的值就保存在這個地址中,複合類型數據在這個地址中保存的是一個指針,這個指針指向的對象可以改變,單指針不可改變。
1 cost foo = {}; 2 3 // 可以改變foo的屬性 4 foo.prop = 123; 5 foo.prop //123 6 7 // 不可以使foo指向別的對象 8 foo = {}; //TypeError: "foo" is read-only
凍結對象:
// 徹底凍結 var constantize = (obj) => { Object.freeze(obj); Object.keys(obj).forEach( (key, i) => { if( typeof obj[key] === 'object' ){ constantize( obj[key] ); } }); }