ES6入門---let和const

let和const均爲ES6中聲明變量的方法,用法相似於var,可是其所聲明的變量,只在let命令所在的代碼塊內有效
<!-- more -->git

沒有變量提高

其所聲明的變量,必須先聲明再使用,若先使用,後聲明則會報錯github

暫時性死區

即在存在let的塊級做用域,造成了一個封閉的環境,在這其中,若先使用後聲明則仍舊會報錯瀏覽器

以下:ide

{
  console.log(temp);//暫時性死區,會報錯
  let temp //死區結束
}

有些隱蔽的死區以下:函數

function foo(x=y,y=2){
  return [x,y]
}
foo() //報錯

該報錯是由於在y尚未聲明的時候就使用了(將y賦值給x),此時就會報錯指針

不能重複聲明

在同一個做用域中,不能重複聲明同一個變量code

function a(){
  let a = 5;
  var a = 5;
}
function b(){
  let a = 5;
  let a = 5;
}

這二者都會報錯對象

塊級做用域

let和const實際上提供了一種塊級做用域
ES6容許塊級做用域隨意嵌套
外層做用域沒法讀取內層做用域的變量,內層做用域的變量可覆蓋外層做用域的變量ip

在塊級做用域中聲明函數

function f() { console.log('I am outside!'); }

(function () {
  if (false) {
    // 重複聲明一次函數f
    function f() { console.log('I am inside!'); }
  }

  f();
}());

ES6中,理論上該函數運行會獲得I am outside,由於外層的做用域沒法訪問內層變量,但內層做用域的變量可訪問外層變量.
在因爲兼容性問題,在瀏覽器中,塊級做用域聲明的函數,行爲相似於var聲明的變量內存

note:考慮到兼容性問題,應該避免在塊級做用域中聲明函數,或者聲明時利用函數表達式的形式聲明:

// 函數聲明語句
{
  let a = 'secret';
  function f() {
    return a;
  }
}
// 函數表達式
{
  let a = 'secret';
  let f = function () {
    return a;
  };
}

note: ES6 的塊級做用域容許聲明函數的規則,只在使用大括號的狀況下成立,若是沒有使用大括號,就會報錯

const

const聲明的變量即常量,即聲明後沒法改變該變量的值,因此const聲明變量時候必須進行初始化,若不聲明,則會報錯
const與let相似:只在聲明所在的塊級做用域內有效,不存在變量提高,一樣存在暫時性死區,只能在聲明的位置後邊使用

const的聲明變量的值不變是針對於變量指向的內存地址不變,
對於值類型的變量類型來講,則值不能變,
但對於引用類型的變量類型來講,則該變量所指向的內存地址不變,即指向對象的指針不變,但對象的內容是能夠變的,

const foo = {};

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

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

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

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

ES6聲明變量的六種方法
var function let const import class

歡迎訪問個人博客瞭解更多

相關文章
相關標籤/搜索