ECMAScript 6 學習筆記一 let 和const命令

react native的語法都是js的,看起來雲裏霧裏,今天開始,花幾天學習下js的語法,目前學習的文檔是ECMAScript 6 入門 作者:阮一峯。如果對於react native有更好的語法學習教材,請賜教。


1:let 命令

ES6新增了let命令,用來聲明變量。它的用法類似於var,但是所聲明的變量,只在let命令所在的代碼塊內有效。

不存在變量提升:let不像var那樣會發生“變量提升”現象。所以,變量一定要在聲明後使用,否則報錯。

不允許重複聲明:let不允許在相同作用域內,重複聲明同一個變量。


2:塊作用域,這個對於java或者ios程序員來說,比較好理解,不用多說。


3:const命令

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

const的作用域與let命令相同:只在聲明所在的塊級作用域內有效。

對於複合類型的變量,變量名不指向數據,而是指向數據所在的地址。const命令只是保證變量名指向的地址不變,並不保證該地址的數據不變,所以將一個對象聲明爲常量必須非常小心。

const foo = {};
foo.prop = 123;

foo.prop
// 123

foo = {}; // TypeError: "foo" is read-only
上面代碼中,常量foo儲存的是一個地址,這個地址指向一個對象。不可變的只是這個地址,即不能把foo指向另一個地址,但對象本身是可變的,所以依然可以爲其添加新屬性。

如果真的想將對象凍結,應該使用Object.freeze方法。

const foo = Object.freeze({});

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

4:全局對象的屬性

全局對象是最頂層的對象,在瀏覽器環境指的是window對象,在Node.js指的是global對象。ES5之中,全局對象的屬性與全局變量是等價的。這被認爲是ES5最大的設計敗筆,

ES6爲了改變這一點,一方面規定,爲了保持兼容性,var命令和function命令聲明的全局變量,依舊是全局對象的屬性;另一方面規定,let命令、const命令、class命令聲明的全局變量,不屬於全局對象的屬性。也就是說,從ES6開始,全局變量將逐步與全局對象的屬性脫鉤。


var a = 1;
// 如果在Node的REPL環境,可以寫成global.a
// 或者採用通用方法,寫成this.a
window.a // 1

let b = 1;
window.b // undefined


ES5只有兩種聲明變量的方法:var命令和function命令。ES6除了添加letconst命令,後面章節還會提到,另外兩種聲明變量的方法:import命令和class命令。所以,ES6一共有6種聲明變量的方法。


學習文檔: ECMAScript 6 入門 作者:阮一峯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章