为什么IIFE/函数不能在外部函数中访问“这个”

Why can't IIFE/function access "this" in outer function?

本文关键字:函数 访问 这个 IIFE 不能 为什么 外部      更新时间:2023-09-26

在下面的代码中,

var myObject = {
    foo: "bar",
    func: function() {
        var self = this;
        console.log("outer func:  this.foo = " + this.foo);
        console.log("outer func:  self.foo = " + self.foo);
        (function() {
            console.log("inner func:  this.foo = " + this.foo);
            console.log("inner func:  self.foo = " + self.foo);
        }());
    }
};
myObject.func();

它在控制台中打印以下内容:

outer func:  this.foo = bar
outer func:  self.foo = bar
inner func:  this.foo = undefined
inner func:  self.foo = bar

前两个很明显,但我不明白第三个和第四个,为什么IIFE可以访问自我,但没有访问权限?我认为它创建了一个闭包,因此它可以访问外部变量自身,这 ?

我不确定这是否解决了您的问题,但是您可以通过将其作为参数传递给IIFE来绑定this

(function(context) {
    console.log("inner func:  context.foo = " + context.foo);
    console.log("inner func:  self.foo = " + self.foo);
}(this));

小提琴