ES6知識點總結(jié)之let、const

最近在看阮一峰老師的ECMAScript 6 入門這本書,隨手做一下讀書筆記
ECMAScript 6 入門 這是原文鏈接
感謝阮老師開源,不過我還是買了紙質(zhì)版。


下面就是我的筆記

1、let

??let 聲明變量用,塊級作用域。let不存在變量提升,以前用var的時候,變量可以在聲明前就可以使用(預(yù)執(zhí)行階段就為變量賦值為undefine,具體原因可以去看看js的執(zhí)行機(jī)制),而用let聲明變量,變量一定要在聲明后才可以使用,不然就會報錯。
以下為例子

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

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

暫時性死區(qū)

??直接上例子

var tmp = 123;

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

ES6 規(guī)定暫時性死區(qū)和let、const語句不出現(xiàn)變量提升,主要是為了減少運行時錯誤,防止在變量聲明前就使用這個變量,從而導(dǎo)致意料之外的行為。這樣的錯誤在 ES5 是很常見的,現(xiàn)在有了這種規(guī)定,避免此類錯誤就很容易了。
總之,暫時性死區(qū)的本質(zhì)就是,只要一進(jìn)入當(dāng)前作用域,所要使用的變量就已經(jīng)存在了,但是不可獲取,只有等到聲明變量的那一行代碼出現(xiàn),才可以獲取和使用該變量。


不允許重復(fù)聲明

??let不允許在相同作用域內(nèi),重復(fù)聲明同一個變量。
??例子:

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

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

2、const

??const聲明一個只讀的常量。一旦聲明,常量的值就不能改變。

const PI = 3.1415;
PI // 3.1415

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

??const聲明后要立刻賦值,不立刻賦值會報錯。

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

const 同樣存在暫時性死區(qū)


值引用類型數(shù)據(jù)定義

??對于引用類型的變量,const只是規(guī)定地址不能變,而里面的值是能夠改變的

const foo = {};

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

// 將 foo 指向另一個對象,就會報錯
foo = {}; // TypeError: "foo" is read-only
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容