天天看點

ES6的全局對象屬性

全局對象是指最頂層的對象,在浏覽器環境下是指window對象。在ES5中,全局對象的屬性和全局變量是等價的。

例如

ES6的全局對象屬性

輸出結果:

1

2

a是全局對象window的屬性,b是全局對象,是以對全局對象屬性的指派和全局對象的指派,實際就是一回事。

從上述代碼可以看出,未聲明的全局變量,會自動認為全局變量window的屬性,這是被人們認為是javaScript設計的敗筆之一。這樣的設計帶來了兩個很大的問題,首先是沒法在編譯時就報出變量未聲明的錯誤,隻有運作時才能知道,其次程式員很容易不知不覺地就建立了全局變量(比如打字出錯)。另一方面,從語義上講,語言的頂層對象是一個有實體含義的對象,也是不合适的。

那麼在ES6文法中,改變了這一弊端。ES6規定為了保持浏覽器的相容性,使用var ,function聲明全局變量,仍然是全局對象的屬性。另一方面規定let,const,class指令聲明的全局,不屬于對象屬性。

ES6的全局對象屬性

運作結果:

1

undefined