为什么IIFE /功能无法访问"这个"在外部功能?

时间:2014-09-13 23:38:58

标签: javascript this iife

在以下代码中,

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可以访问自己但是没有访问权限?我认为它创建了一个闭包,所以它可以访问外部变量self和this?

1 个答案:

答案 0 :(得分:0)

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

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

Fiddle