javascript – 全局函数中的“this”

前端之家收集整理的这篇文章主要介绍了javascript – 全局函数中的“this”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的印象是“this”关键字代表范围内的当前所有者.显然,这是错误的.让我来看看代码: @H_403_2@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工具警报窗口未定义,但是如果将其包装在自执行函数中,则会按预期未定义

@H_403_2@(function(){ 'use strict'; alert(this); }());

猜你在找的JavaScript相关文章