【发布时间】:2013-03-19 11:18:21
【问题描述】:
在我尝试过的其他浏览器(例如 Chromium、IE、Safari)中,在控制台(在任何函数之外)执行的代码的默认范围与在 @987654322 中的函数之外执行的代码相同@。也就是说,this 指的是window 对象,并且任何新声明的变量都成为全局变量(以及,等效地,window 对象的属性)。
在 Firefox 中...发生了其他事情,但我不太清楚是什么。在大多数浏览器中,this === window 在 Chrome 控制台中的计算结果为 true,但在 Firefox 中它是错误的。不过,this.window === window 在 Firefox 中是正确的。因此,通过控制台新声明或分配的变量不会对页面上运行的脚本可见,除非您将它们明确分配为 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
幕后发生了什么? Firefox 中this 所指的神秘对象是什么,为什么它与window 对象有这种奇特的关系?这些东西在任何地方都有记录吗?
(以防万一,我在 Firefox 19.0.2 中体验过这些东西。我还没有测试过其他 Firefox 版本。)
【问题讨论】:
-
听起来像是在另一个范围内运行。您所看到的正是原型继承的工作原理。 (看起来您正在看到一个原型为 foo 的对象)。 (我刚找到的相关问题stackoverflow.com/questions/1803660/…)
-
尝试在控制台中运行
debugger;。 -
我在用手机,所以我无法获得链接,但谷歌“kangax delete”你应该得到这个奇怪行为的解释。
标签: javascript firefox console scope