在JavaScript中了解此。我对这种内在的模糊不清。为什么这指向iife中的窗口对象?这应该指向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();
输出-
bar2,bar2
bar1,bar2
我担心第二行的bar1。
答案 0 :(得分:1)
函数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