es6學習1:let和const

一:let  es6

相似var 可是所聲明的變量,只在let命令所在的代碼塊內有效。數組

1) 不存在變量提高 數據結構

 

// var 的狀況
console.log(foo); // 輸出undefined
var foo = 2;

// let 的狀況
console.log(bar); // 報錯ReferenceError
let bar = 2;

2)暫時性死區
暫時性死區的本質就是,只要一進入當前做用域,所要使用的變量就已經存在了,可是不可獲取,只有等到聲明變量的那一行代碼出現,才能夠獲取和使用該變量。函數

var tmp = 123;

if (true) {
  tmp = 'abc'; // ReferenceError
  let tmp;
}

3)不容許重複聲明spa

let不容許在相同做用域內,重複聲明同一個變量。 所以,不能在函數內部從新聲明參數。指針

// 報錯
function func() {
  let a = 10;
  var a = 1;
}

// 報錯
function func() {
  let a = 10;
  let a = 1;
}


function func(arg) {
  let arg;
}
func() // 報錯

function func(arg) {
  {
    let arg;
  }
}
func() // 不報錯

 

二:constcode

const聲明一個只讀的常量。一旦聲明,常量的值就不能改變。具備上述let的屬性 對象

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

const PI = 3.1415;
PI // 3.1415

PI = 3;
// TypeError: Assignment to constant variable.



const foo;
// SyntaxError: Missing initializer in const declaration

const實際上保證的,並非變量的值不得改動,而是變量指向的那個內存地址所保存的數據不得改動。內存

對於簡單類型的數據(數值、字符串、布爾值),值就保存在變量指向的那個內存地址,所以等同於常量。

但對於複合類型的數據(主要是對象和數組),變量指向的內存地址,保存的只是一個指向實際數據的指針,const只能保證這個指針是固定的(即老是指向另外一個固定的地址),至於它指向的數據結構是否是可變的,就徹底不能控制了

const foo = {};

// 爲 foo 添加一個屬性,能夠成功
foo.prop = 123;
foo.prop // 123

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

 

 

原文引自:http://es6.ruanyifeng.com/

相關文章
相關標籤/搜索