我的印象是“this”关键字表示当前所有者在范围内。显然,这是错误的。让我得到的代码:全球功能中的“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
上述第一警报[对象]窗口的代码,因为我希望,但那么接下来的两次调用P1()和p2()警惕“这个”为“未定义” 。对p1()和p2()的最后两次调用将“this”提醒为[object Window]。
p1()和p2()是否存在于全局(即窗口)范围中?我认为调用window.p1()与调用p1()同义,就像调用alert()与window.alert()同义。
以我的(C#)思维方式,p1()和p2()在全局范围内。这些函数是全局窗口对象的成员,因此当它们引用“this”时,它们应该指向[object Window]。显然,我在这里非常错误。
和
看起来像你在严格模式下运行脚本 –
在Chrome控制台上运行良好..我得到'[object window]'所有警报! –
问题是严格模式。运行您放置在此处的代码的行为与您预期的相同,并提醒所有警报的窗口 – atmd