0

如果我创建一个变量,比如 _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 每次都有效?如果我不使用匿名函数,它会在第一次之后失败。

4

1 回答 1

1

this是一个特殊的变量。它很特别,因为它的上下文是在您调用this内部函数时确定的。

但是,如果您要this在闭包内分配给变量:

var myFunc = (function () {
    var staticThis = this;
    return function () {
        staticThis.doStuff();
    };
}).call(myObj);

看看我做了什么?
我有一个名为 的变量staticThis,我明确将其设置为等于myObj
staticThis保留 的this恰好是指向特定对象的指针),而不是保留thisthis关键字保存的“神奇”动态上下文解析。

于 2012-11-13T08:34:25.580 回答