如果我创建一个变量,比如_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.ctx每次都有效?如果我不使用匿名函数,它会在第一次失败后失败。
答案 0 :(得分:1)
this
是一个特殊变量。这很特殊,因为它的上下文是在你用this
调用函数时确定的。
但是,如果您将this
分配给变量,则在闭包内:
var myFunc = (function () {
var staticThis = this;
return function () {
staticThis.doStuff();
};
}).call(myObj);
看看我做了什么?
我有一个名为staticThis
的变量,我明确将其设置为等于myObj
。
staticThis
保留this
的 值 (恰好是指向特定对象的指针),而不是保持"魔法& #34;动态上下文解析this
,为this
关键字保存。