如果我创建一个变量,比如 _this,并将其分配给 this,它会被捕获为一个闭包,而不是对 this 的当前版本的引用。为什么?
示例代码:
var AnimCore = (function () {
function AnimCore(ctx) {
this.ctx = ctx;
}
AnimCore.prototype.beginAnimation = function () {
this.animLoop();
};
AnimCore.prototype.animLoop = function () {
var _this = this;
this.ctx.drawSomething(); // removed actual drawing code, this is a proxy for it.
window.setTimeout(function () {
_this.animLoop();
}, 1000 / 60);
};
return AnimCore;
})();
在这种情况下,每次调用函数时,_this 都绑定到初始 this 而不是新的 this。为什么?
[更新] 我现在明白,闭包发生在匿名函数中,这就是为什么 _this 总是指同一件事。然而,下一个问题是为什么 this.ctx 每次都有效?如果我不使用匿名函数,它会在第一次之后失败。