【发布时间】:2015-09-29 04:33:58
【问题描述】:
我的印象是“this”关键字代表范围内的当前所有者。显然,这是错误的。让我来看看代码:
alert(this); // alerts as [object Window] -- Okay
function p1() {
alert(this);
}
var p2 = function() {
alert(this);
}
p1(); // alerts as undefined -- ???
p2(); // alerts as undefined -- ??
window.p1(); // alerts as [object Window] -- Okay
window.p2(); // alerts as [object Window] -- Okay
如我所料,上面的代码首先警告 [object Window],但接下来对 p1() 和 p2() 的两次调用将“this”警告为“undefined”。最后两次调用 p1() 和 p2() 将“this”作为 [object Window]。
p1() 和 p2() 不是存在于全局(即窗口)范围内吗?我认为调用window.p1() 是调用p1() 的同义词,就像调用alert() 是window.alert() 的同义词一样。
在我的 (C#) 思维方式中,p1() 和 p2() 都在全局范围内。这些函数是全局窗口对象的成员,因此当它们引用“this”时,它们应该是指 [object Window]。很明显,我在这里大错特错。
【问题讨论】:
-
看起来你是在严格模式下运行脚本
-
在 Chrome 控制台上运行良好。我收到
[object Window]的所有警报! -
问题是严格模式。运行您在此处放置的代码会按照您的预期运行所有警报的警报窗口
-
刚刚更新了我的答案 回复:chrome给窗口而不是未定义,似乎它可以在sef中找到而不是输入控制台
标签: javascript this