我的印象是「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