6

据我所知,在范围可能发生变化this的回调中使用分配给变量。this但是通过挖掘 ExtJS 源代码,我发现它用于各种功能,但并非总是如此。那么有什么理由我会分配this给作用域下的局部变量,或者 ExtJS 源代码只是在与不同的开发人员风格作斗争?

4

3 回答 3

3

@kevhender 向我指出了正确的 sencha论坛帖子,其中 evan 给出了很好的解释。

这只是为了大小。这是一个例子:

function doA() {
    var me = this;

    me.a();
    me.b();
    me.c();
    me.d();
    me.e();
    me.f();
    me.g();
    me.h();
    me.i();
    me.j();
    me.k();
    me.l();
}

function doB() {
    this.a();
    this.b();
    this.c();
    this.d();
    this.e();
    this.f();
    this.g();
    this.h();
    this.i();
    this.j();
    this.k();
    this.l();
}

压缩后我们得到:

function doA(){var a=this;a.a();a.b();a.c();a.d();a.e();a.f();a.g();a.h();a.i();a.j();a.k();a.l()}
function doB(){this.a();this.b();this.c();this.d();this.e();this.f();this.g();this.h();this.i();this.j();this.k();this.l()};

它加起来。


据此我们应该

  • 如果我们只使用它最多 3 次,则不要使用本地 var

    function doA(){var a=this;a.a();a.b();a.c();};
    function doB(){this.a();this.b();this.c();};
    
  • 如果我们更频繁地使用它然后使用它,然后使用它三次

    function doA(){var a=this;a.a();a.b();a.c();a.d()};
    function doB(){this.a();this.b();this.c();this.d()};
    
于 2013-07-22T13:56:08.347 回答
2

这有几个原因,最重要的是使用局部变量将在压缩文件期间节省一些字节。一小段代码可能看起来不多,但随着时间的推移它可以加起来很多。

Sencha 论坛上有一个很长的帖子讨论这个问题:http ://www.sencha.com/forum/showthread.php?132045 。

于 2013-07-22T13:33:37.717 回答
0

正如您正确指出this的那样,有时会在范围可能发生变化的地方使用。

在某些情况下,您希望这样做以确保没有范围界定问题。

除此之外,开发人员有时只是this出于习惯而不是出于必要而分配给变量。

于 2013-07-22T13:31:56.173 回答