在我試過的其他瀏覽器(例如Chromium,IE,Safari)中,在控制檯上執行的代碼的默認範圍(在任何函數之外)與在<script>
中的函數外部執行的代碼的默認範圍相同。也就是說,this
引用window
對象,並且任何新聲明的變量都將成爲全局變量(以及等效的window
對象的屬性)。Firefox Web控制檯的默認範圍 - 發生了什麼?
在Firefox ... 別的東西發生,但我不能弄清楚是什麼。在大多數瀏覽器中,this === window
在Chrome控制檯中評估爲true
,但在Firefox中它是錯誤的。儘管如此,Firefox的this.window === window
也是如此。因此,通過控制檯新聲明或分配的變量不會對頁面上運行的腳本變得可見,除非您將它們顯式指定爲window
對象的屬性。
古怪並不止於此。對window
對象的賦值神奇地傳播並修改了Firefox控制檯範圍內的變量,但相反情況並非如此。例如:
window.foo = 5;
console.log(foo); // 5
console.log(this.foo); // 5
console.log(window.foo); // 5
foo = 10;
console.log(foo); // 10
console.log(this.foo); // 10
console.log(window.foo); // 5 -- in any other browser, this would be 10
背後發生了什麼? this
在Firefox中引用的神祕對象是什麼,爲什麼它與window
對象有這種特殊關係?這東西是否記錄在任何地方
(如果它的事項,我經歷過這種東西在Firefox 19.0.2。我沒有測試過其他版本的Firefox)
聽起來像是在另一個範圍內運行。你看到的是原型繼承的工作原理。 (看起來好像你看到一個原型爲foo的對象)。 (相關問題我剛剛發現http://stackoverflow.com/questions/1803660/firebug-console-window-scope-why-isnt-this-always-the-same) – 2013-03-19 11:20:57
嘗試在控制檯中運行'debugger;'。 – 2013-03-19 11:23:42
我在我的手機上,所以我不能得到的鏈接,但谷歌「kangax刪除」,你應該得到這種奇怪的行爲的解釋。 – 2013-03-19 12:19:33