这里面的 iife 指向窗口吗? [复制]

2024-01-02

学习关于this在 JavaScript 中。我对 iife 内部的范围感到困惑。为什么 this 指向 iife 中的 window 对象?这应该指向 myObj,因为它位于 myObj 内部。

window.foo = "bar1";
var myObj = {
   foo: "bar2",
   func: function() {
       var self = this;
       console.log(this.foo + ", " + self.foo);
       (function xx() {
           console.log(this.foo + ", " + self.foo)
       }());
   }
}
myObj.func();

输出 -

酒吧2,酒吧2
栏 1、栏 2

我担心第二行的 bar1 。


功能xx称为 IIFE,这是一个简单的函数调用。根据规范,在简单的函数调用中,全局对象(浏览器中的窗口)被分配给this.

window.foo = "bar1";
var myObj = {
   foo: "bar2",
   func: function() {
       var self = this;
       console.log(this.foo + ", " + self.foo);
       (function xx() {
           console.log(`this === window :`, this === window);
           console.log(this.foo + ", " + self.foo)
       }());
   }
}
myObj.func();

参考:

由于以下代码不是严格模式,并且因为this不是由调用设置的,这将默认为全局对象,即浏览器中的窗口。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这里面的 iife 指向窗口吗? [复制] 的相关文章

随机推荐