1. 程式人生 > >let與const的區別

let與const的區別

blog log ons 內部 reac cnblogs == 聲明 freeze

let與const都是只在聲明所在的塊級作用域內有效。

let聲明的變量可以改變,值和類型都可以改變,沒有限制。

const聲明的變量不得改變值,這意味著,const一旦聲明變量,就必須立即初始化,不能留到以後賦值。

const a ;//報錯,一旦聲明變量,應該立即賦值!!

const b = 2;
b = 3//報錯,因為定義常量之後不能成重新賦值!!

對於復合類型的變量,如數組和對象,變量名不指向數據,而是指向數據所在的地址。const命令只是保證變量名指向的地址不變,並不保證該地址的數據不變,所以將一個對象聲明為常量必須非常小心。

const names = [];
names = [1,2,3] //
出錯,因為變量names指向的地址不能發生改變,應始終指向[]所在的地址!!![1,2,3]與[]不是同一個地址
//不會報錯,因為names指向的地址不變,改變的只是內部數據
const names = [];
names[0] = 1
names[1] = 2
names[2] = 3

如果想讓定義的對象或數組的內部數據也不能夠修改和改變,可以使用object.freeze(names)進行凍結,這樣為對象添加新屬性就不起作用。

除了將對象本身凍結,對象的屬性也應該凍結。下面是一個將對象徹底凍結的函數

var constantize = (obj) => {
  Object.freeze(obj);
  Object.keys(obj).forEach( (key) 
=> { if ( typeof obj[key] === ‘object‘ ) { constantize( obj[key] ); } }); };

let與const的區別