В следующем коде,Почему функция IIFE/function не допускает «это» во внешней функции?
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 имеет доступ к себе, но не имеет доступа для этого? Я думал, что он создает закрытие, поэтому он имеет доступ к внешним переменным «я» и тому подобное?
вы можете использовать».call (это) "вместо"() "с аноном, но _this_ не наследуется, как закрытие. – dandavis
Поскольку выражение 'this' является выражением, которое вычисляет * текущий контекст функции *. Это * не * переменная, и она * не * унаследована от сдерживаемой области. – user2864740
Это просто непонимание того, как это работает. См. Здесь http://stackoverflow.com/questions/3127429/javascript-this-keyword – elclanrs