ES6 學習

var聲明的變量為全局變量
let聲明的變量為局部變量
const聲明為局部只讀常量,值不能進行修改(聲明就要賦值,不然會報錯)

const實際上保證的,并不是變量的值不得改動,而是變量指向的那個內存地址所保存的數據不得改動。對于簡單類型的數據(數值、字符串、布爾值),值就保存在變量指向的那個內存地址,因此等同于常量。但對于復合類型的數據(主要是對象和數組),變量指向的內存地址,保存的只是一個指向實際數據的指針,const只能保證這個指針是固定的(即總是指向另一個固定的地址),至于它指向的數據結構是不是可變的,就完全不能控制了。因此,將一個對象聲明為常量必須非常小心。

const foo = {};

// 為 foo 添加一個屬性,可以成功
foo.prop = 123;
foo.prop // 123

// 將 foo 指向另一個對象,就會報錯
foo = {}; // TypeError: "foo" is read-only

Object.freeze

凍結對象

const foo = Object.freeze({});

// 常規模式時,下面一行不起作用;
// 嚴格模式時,該行會報錯
foo.prop = 123;

凍結對象屬性

var constantize = (obj) => {
  Object.freeze(obj);
  Object.keys(obj).forEach( (key, i) => {
    if ( typeof obj[key] === 'object' ) {
      constantize( obj[key] );
    }
  });
};
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Swift1> Swift和OC的區別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,136評論 1 32
  • let命令 let與var之間的不同 聲明變量的作用域 作用:聲明變量 類似var與var的區別:var聲明的變量...
    瑤九九閱讀 190評論 0 0
  • let 基本用法 let命令,用來聲明變量。用法類似于var,但聲明的變量,只在let命令所在的代碼塊內有效。 f...
    oWSQo閱讀 444評論 0 0
  • const聲明一個只讀的常量。一旦聲明,常量的值就不能改變。 const聲明的變量不得改變值,這意味著,const...
    ROBIN2015閱讀 274評論 0 0
  • 什么是ES6? ECMAScript 6.0 是繼ECMAScript 5.1 之后 JavaScript 語...
    多多醬_DuoDuo_閱讀 1,128評論 0 4