let與const的區別

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命令

能工摹形,巧匠竊意。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章