在ECMAScript 5及更低版本中,腳本頂層的var
聲明成爲全局對象,也就是說,全局對象的屬性(瀏覽器中的window
)。在ECMAScript 6中,我們現在有模塊。模塊處於嚴格模式,所以我們不會通過忘記var
來自動創建全局,但是如果我在模塊的頂層聲明var
,它是否會成爲window
對象的全局屬性?如果我使用let
或const
或ES6中添加的任何新聲明表單怎麼辦?變量聲明是否成爲ecmascript 6模塊中窗口的屬性?
var foo = {};
console.log(window.foo === foo); // true or false?
let bar = {};
console.log(window.bar === bar); // what about this?
@Bergi:我不認爲這是重複的。這個問題在腳本上下文中詢問「let」。這個問題在模塊上下文中詢問'var'。 – 2015-12-14 16:38:04
有沒有一種有用的方法可以編輯這個問題來調出區別?我覺得不適合在「MODULE上下文」中添加「note,VAR」(或者其他),因爲這基本上只是對版主有點粗魯。但我不確定如何澄清這種區別,使其自然成爲問題的一部分。 – 2015-12-14 16:53:55
這看起來更接近於一個重複:http://stackoverflow.com/questions/32961255/is-there-an-es6-module-scope-equivalent-to-window?rq=1雖然有細微的差異。 (我問他們是否繼續使用'window';這個問題是詢問模塊是否有'window'這樣的_something_,兩者的答案都是一樣的。) – 2015-12-14 17:02:31