在我试过的其他浏览器(例如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