javascript – 全局函数中的“this”

前端之家收集整理的这篇文章主要介绍了javascript – 全局函数中的“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()警告“this”为“undefined”.最后两次调用p1()和p2()将“this”警告为[object window].

是不是p1()和p2()存在于全局(即窗口)范围内?我认为调用window.p1()与调用p1()是同义词,就像调用alert()与window.alert()同义一样.

对于我的(C#)思维方式,p1()和p2()属于全局范围.这些函数是全局窗口对象的成员,因此当它们引用“this”时,它们应该引用[object Window].显然,我在这里非常错.

解决方法

因为你正在使用严格的模式,并按照规范:

If this is evaluated within strict mode code,then the this value is not coerced to an object.

您所拥有的代码会在所有警报实例中提醒窗口,但由于您处于严格模式,因此未定义(因为它应该是)

更新:chrome dev工具警报窗口未定义,但是如果将其包装在自执行函数中,则会按预期未定义

(function(){
   'use strict';
   alert(this);
}());
原文链接:https://www.f2er.com/js/156587.html

猜你在找的JavaScript相关文章