2013-07-22 6 views
6

Per quanto ne so, l'assegnazione di this a una variabile viene utilizzata all'interno di callback in cui l'ambito this può cambiare. Ma scavando attraverso la fonte ExtJS l'ho trovato usato in tutti i tipi di funzioni ma non sempre. Quindi c'è qualche ragione per cui assegnerei this a una variabile locale al di sotto dell'ambito o la fonte ExtJS sta semplicemente lottando con diversi stili di sviluppo?Qual è il motivo dell'assegnazione di questa variabile locale senza una richiamata?

risposta

2

Ci sono alcuni motivi per questo, il più significativo è che l'utilizzo di una variabile locale salverà alcuni byte durante la compressione dei file. Potrebbe non sembrare molto per un piccolo pezzetto di codice, ma può aumentare un po 'nel tempo.

C'è una lunga discussione nei forum Sencha che parla proprio di questo problema: http://www.sencha.com/forum/showthread.php?132045.

+0

Grazie, mi hai indicato la giusta direzione, quindi accettato e +1. Ad ogni modo ho sentito di scrivere una risposta più complessa e ho aggiunto questo alla mia domanda. – JJR

0

Come hai affermato correttamente, this viene talvolta utilizzato in luoghi in cui l'oscilloscopio potrebbe cambiare.

In alcuni casi si desidera fare lo stesso per assicurarsi che non vi siano problemi di ambito.

Oltre a ciò, gli sviluppatori a volte assegnano solo this a una variabile per abitudine più che per necessità.

3

@kevhender mi ha indicato a destra sencha forum thread dove evan ha dato una spiegazione molto buona.

È solo per le dimensioni. Ed ecco un esempio:

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(); 
} 

compressa otteniamo:

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()}; 

Tutto fa brodo.


Secondo che dovremmo

  • NON utilizzare un var locale se usiamo questo solo fino a tre volte

    function doA(){var a=this;a.a();a.b();a.c();}; 
    function doB(){this.a();this.b();this.c();}; 
    
  • e usarlo se noi utilizzare questo più spesso poi tre volte

    function doA(){var a=this;a.a();a.b();a.c();a.d()}; 
    function doB(){this.a();this.b();this.c();this.d()}; 
    
Problemi correlati