2013-07-22 5 views
6

私が知る限り、thisを変数に割り当てることは、thisのスコープが変更されるかもしれないコールバック内で使用されます。しかし、ExtJSのソースを掘り下げてみると、それはあらゆる種類の機能で使用されていましたが、必ずしもそうではありませんでした。だから私はthisをスコープの下にあるローカル変数に代入する何らかの理由があるのでしょうか?あるいは、異なる開発者スタイルに苦しんでいるExtJSソースですか?これをコールバックなしのロケール変数に割り当てる理由は何ですか?

答えて

2

これにはいくつかの理由があります。最も重要なことは、ローカル変数を使用するとファイルの圧縮中に数バイトが節約されることです。小さなコードではあまり気にならないかもしれませんが、時間の経過とともに良いビットを追加することができます。

Senchaのフォーラムには、この問題に関する長いスレッドがあります。http://www.sencha.com/forum/showthread.php?132045です。

+0

ありがとうございました。ありがとうございました。ありがとうございました。あなたは正しい方向に受け入れられ+1しました。とにかく私はもっと複雑な答えを書いて、自分の質問にこれを加えました。 – JJR

0

thisは、スコープが変更される場所で使用されることがあります。

スコープの問題がないことを確認する場合もあります。

これ以外にも、開発者は時々、必要以上に習慣外の変数にthisを割り当てます。

3

@kevhenderが右に指摘しましたsencha forum threadここで、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回だけ

    function doA(){var a=this;a.a();a.b();a.c();}; 
    function doB(){this.a();this.b();this.c();}; 
    
  • まで、これを使用する場合は、ローカルVARを使用して、我々があればそれを使用これを3回以上頻繁に使用する

    function doA(){var a=this;a.a();a.b();a.c();a.d()}; 
    function doB(){this.a();this.b();this.c();this.d()}; 
    
関連する問題