【发布时间】:2014-11-07 20:12:35
【问题描述】:
在下面的代码中,
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 ?我认为它创建了一个闭包,因此它可以访问外部变量 self 和 this ?
【问题讨论】:
-
你可以使用 ".call(this)" 而不是 "()" 和 anon,但是 this 不像闭包那样被继承。
-
因为
this是一个计算出当前函数上下文的表达式。它不是一个变量,它不是继承自一个包含范围。 -
这只是对
this工作原理的误解。见这里stackoverflow.com/questions/3127429/javascript-this-keyword -
谢谢大家,我不知道如何给 cmets 投票,对这个网站还很陌生。但他们都非常有帮助!
-
更好的参考是这个答案(它更好,因为它更完整并且定期更新(由我)):stackoverflow.com/questions/13441307/…
标签: javascript this iife