最近在看阮一峰老師的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