2010-04-29 41 views
7

Đây có phải làjQuery và chức năng phạm vi

($.fn.myFunc = function() { 
     $('#Element').click(function() { /*code */ }); 
    })(); 

Nếu không, có thể ai đó hãy giải thích sự khác biệt, và đề xuất các tuyến đường tốt hơn để đưa cho cả hai hoạt động, tái sử dụng chức năng và sự rõ ràng của việc đọc.

Cảm ơn!

Trả lời

8

Sự khác biệt duy nhất là trước đây cung cấp tham chiếu đến hàm.

Vì vậy, bạn có thể làm điều này:

($.fn.myFunc = function() { 
    var Dennis = function() { /*code */ } 
    $('#Element').click(Dennis); 

    Dennis(); 
})(); 

Mà không phải là có thể với sau này.

Điều này có thể hữu ích. Ví dụ: tôi có thể muốn nhấp để thao tác một phần của trang, nhưng tôi cũng muốn làm điều đó khi tải trang. Tôi có thể làm như vậy với:

$(function(){ 

    var manipulateSomething = function() { 
     // do stuff 
    }; 

    // do it on click 
    $("#Element").click(manipulateSomething); 

    // and do it right now (document.ready) 
    manipulateSomething(); 

}); 

(Ngoài:. Bạn sẽ không gọi $("#Element").click(); để thực hiện điều này, trừ khi bạn muốn tất cả các bộ xử lý nhấp chuột vào #Element để bắn)

0

Giống nhau. Tôi thường đi với thứ hai, tuyến đường chức năng ẩn danh.

Lý do duy nhất để đặt tên hàm của bạn là nội tuyến, như trong ví dụ đầu tiên, nếu bạn cần sử dụng lại, có thể sau này trong hàm hoặc nếu bạn muốn rõ ràng chức năng là gì. Nhưng ngay cả trong trường hợp đó, nếu chức năng Dennis là để lấy đối số, bạn sẽ vẫn còn cần phải sử dụng phạm vi chức năng mới trong cuộc gọi của bạn để chuyển các đối số đó.

Đóng cửa chức năng ẩn danh là mẫu mạnh mẽ hơn.

0

thứ hai trông đẹp hơn :) nhưng giống nhau của nó

0

Có, chức năng ẩn danh rõ ràng hơn, mặc dù không thêm các hàm có tên thừa không được gọi ngay lập tức.

Nếu bạn thực sự muốn đặt tên ở đó, bạn can. Tên thường chỉ được đặt ở đó để làm cho chúng đệ quy mặc dù.

Các vấn đề liên quan