本文摘抄于阮一峰老師的《ECMAScript 6 入門》(http://es6.ruanyifeng.com/)
瀏覽器的頂層對象指的是window對象拐纱,node指的是global對象玉罐。頂層對象的屬性和全局變量是等價(jià)的启盛。
Paste_Image.png
如圖a是全局變量陶贼,是頂層對象的屬性弄贿,b由let聲明求类,不是頂層對象屬性。
global屬性
ES5:
-瀏覽器頂層對象是window叠穆,node和web worker沒有window少漆。
-瀏覽器和web worker,self只想頂層對象硼被,node無self
-node頂層對象是gobal示损,其他環(huán)境不支持
ES6:
-全局環(huán)境中,this會返回頂層對象嚷硫。但是检访,Node模塊和ES6模塊中,this返回的是當(dāng)前模塊仔掸。
-函數(shù)里面的this烛谊,如果函數(shù)不是作為對象的方法運(yùn)行,而是單純作為函數(shù)運(yùn)行嘉汰,this會指向頂層對象丹禀。但是,嚴(yán)格模式下鞋怀,這時(shí)this會返回undefined双泪。
-不管是嚴(yán)格模式,還是普通模式密似,new Function('return this')()焙矛,總是會返回全局對象。但是残腌,如果瀏覽器用了CSP(Content Security Policy村斟,內(nèi)容安全政策)贫导,那么eval、new Function這些方法都可能無法使用蟆盹。
下面是在所有情況下的拿到頂層對象global:
Paste_Image.png