全局對(duì)象是指最頂層的對(duì)象,在瀏覽器環(huán)境下是指window對(duì)象。在ES5中,全局對(duì)象的屬性和全局變量是等價(jià)的。
例如
輸出結(jié)果:
1
2
a是全局對(duì)象window的屬性,b是全局對(duì)象,所以對(duì)全局對(duì)象屬性的賦值和全局對(duì)象的賦值,實(shí)際就是一回事。
從上述代碼可以看出,未聲明的全局變量,會(huì)自動(dòng)認(rèn)為全局變量window的屬性,這是被人們認(rèn)為是javaScript設(shè)計(jì)的敗筆之一。這樣的設(shè)計(jì)帶來(lái)了兩個(gè)很大的問(wèn)題,首先是沒(méi)法在編譯時(shí)就報(bào)出變量未聲明的錯(cuò)誤,只有運(yùn)行時(shí)才能知道,其次程序員很容易不知不覺(jué)地就創(chuàng)建了全局變量(比如打字出錯(cuò))。另一方面,從語(yǔ)義上講,語(yǔ)言的頂層對(duì)象是一個(gè)有實(shí)體含義的對(duì)象,也是不合適的。
那么在ES6語(yǔ)法中,改變了這一弊端。ES6規(guī)定為了保持瀏覽器的兼容性,使用var,function聲明全局變量,仍然是全局對(duì)象的屬性。另一方面規(guī)定let,const,class命令聲明的全局,不屬于對(duì)象屬性。
運(yùn)行結(jié)果:
1
undefined