IIFE 的 this 是否总是指向全局对象?
Does an IIFE's this always point towards the global object?
我在下面有一个代码片段。
var obj = {
name: "Mohit",
func: function(){
var self = this;
(function(){
console.log(this.name);
console.log(self.name)
})()
}
}
执行 obj.func() 后,第一个 console.log 未定义,而第二个为 Mohit。
这是否意味着 IIFE 总是将 this 绑定到全局 window 对象?
如何将 self 定义为 this 是发生在 obj 上的 IIFE 的绑定?
您调用的任何 函数都没有明确引用 this
将 this
设置为全局对象,或者在“严格”模式下设置为 undefined
(在你的例子中不是这种情况)。
如果需要,您可以明确确保 this
绑定到 obj
:
var obj = {
name: "Mohit",
func: function(){
var self = this;
(function(){
console.log(this.name);
console.log(self.name)
}).call(this)
}
}
obj.func();
通过使用 .call(this)
,您可以在被调用函数中为 this
提供一个值。
我在下面有一个代码片段。
var obj = {
name: "Mohit",
func: function(){
var self = this;
(function(){
console.log(this.name);
console.log(self.name)
})()
}
}
执行 obj.func() 后,第一个 console.log 未定义,而第二个为 Mohit。
这是否意味着 IIFE 总是将 this 绑定到全局 window 对象?
如何将 self 定义为 this 是发生在 obj 上的 IIFE 的绑定?
您调用的任何 函数都没有明确引用 this
将 this
设置为全局对象,或者在“严格”模式下设置为 undefined
(在你的例子中不是这种情况)。
如果需要,您可以明确确保 this
绑定到 obj
:
var obj = {
name: "Mohit",
func: function(){
var self = this;
(function(){
console.log(this.name);
console.log(self.name)
}).call(this)
}
}
obj.func();
通过使用 .call(this)
,您可以在被调用函数中为 this
提供一个值。