2013-07-22 53 views
6

Theo như tôi biết chỉ định this cho một biến được sử dụng trong các cuộc gọi lại trong đó phạm vi this có thể thay đổi. Nhưng đào qua nguồn ExtJS tôi thấy nó được sử dụng trong tất cả các loại chức năng nhưng không phải lúc nào. Vì vậy, có bất kỳ lý do mà tôi sẽ chỉ định this cho một biến địa phương bên dưới phạm vi hoặc là nguồn ExtJS chỉ đấu tranh với các phong cách phát triển khác nhau?Lý do để gán điều này cho biến miền địa phương mà không cần gọi lại là gì?

Trả lời

2

Có một vài lý do cho điều này, điều quan trọng nhất là sử dụng biến cục bộ sẽ tiết kiệm được một vài byte khi nén tệp. Nó có thể không có vẻ như nhiều cho một chút mã, nhưng nó có thể thêm một chút tốt theo thời gian.

Có một chuỗi dài tại diễn đàn Sencha nói về vấn đề này: http://www.sencha.com/forum/showthread.php?132045.

+0

Cảm ơn bạn, bạn đã chỉ cho tôi đúng hướng để được chấp nhận và +1. Dù sao tôi cảm thấy viết một câu trả lời phức tạp hơn và thêm vào câu hỏi của riêng tôi. – JJR

0

Như bạn đã nêu chính xác this đôi khi được sử dụng ở những nơi phạm vi có thể thay đổi.

Có những trường hợp bạn muốn thực hiện tương tự để đảm bảo không có vấn đề về phạm vi.

Ngoài ra, các nhà phát triển đôi khi chỉ gán this cho một biến ngoài thói quen hơn là không cần thiết.

3

@kevhender đã chỉ cho tôi bên phải sencha forum thread nơi evan đã đưa ra giải thích rất tốt.

Chỉ dành cho kích thước. Và đây là một ví dụ:

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

nén chúng tôi nhận được:

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

Nó tăng dần lên.


Theo rằng chúng ta nên

  • KHÔNG sử dụng một var địa phương nếu chúng tôi sử dụng này chỉ lên đến ba lần

    function doA(){var a=this;a.a();a.b();a.c();}; 
    function doB(){this.a();this.b();this.c();}; 
    
  • và sử dụng nó nếu chúng ta sử dụng điều này thường xuyên hơn ba lần

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