这只是JavaScript的核心概念(特别是ECMAScript5).匿名函数,特别是在闭包中,不保留上下文.
你可以这样做:
(function() { console.log("inner func: this.foo = " + this.foo); console.log("inner func: self.foo = " + self.foo); }).call(this);
那是因为你实际上是在调用这个函数.如果您传入回调,则可以Function.prototype.bind
改为使用.
如果您正在使用ECMAScript6,则可以使用箭头函数来保留匿名回调的上下文:
(() => { // `this` retains the context of its parent context });