2012-01-20 42 views
5

Tôi đã nhìn vào các plugin jQuery cho Twitter Bootstrap và thấy rằng họ đang tất cả được xác định bằng cách sử dụng mô hình như thế này:Ai đó có thể giải thích mẫu javascript này được sử dụng trong các plugin Twitter Bootstrap cho tôi không?

!function($) { 
    // code here 

    // plugin definition here 

} (window.jQuery || window.ender); 

này trông giống như một biến thể của chức năng ẩn danh ngay lập tức thực hiện (nặc danh đóng cửa):

(function($) { 
    // code here 

}(jQuery)); 

Ai đó có thể giải thích sự khác biệt của Bootstrap và tại sao? Đây có phải là cách tốt hơn để viết một đóng cửa ẩn danh không?

Cảm ơn!

+1

Tôi nghĩ sự khác biệt duy nhất là nó giúp bạn tiết kiệm một nhân vật ... Oh và tạo mẫu _obscure_. –

+2

@ Jordão: Tránh '()' giúp tránh lỗi [như thế này] (http://stackoverflow.com/questions/8944398/why-does-leaving-off-a-semicolon-break-this-code) –

+0

@ Tôi không phải là tôi: cảm ơn vì đã chỉ ra điều đó. Tôi vẫn chưa sử dụng thành ngữ này, vì nó không phải là cách thích hợp để sửa lỗi đó. –

Trả lời

11
// |---1. makes the function as part of an expression 
// |        so it can be immediately invoked 
// v 
    !function($) { 
//   ^
//   |___4. references what was passed, window.jQuery or window.ender 

     // code here 

     // plugin definition here 

    } (window.jQuery || window.ender); // <---2. immediately invoke the function 
//  ^   ^
//   |________________|_______3. pass window.jQuery if it exists, 
//              otherwise window.ender 
+0

Câu trả lời hay - cảm ơn! Vì vậy, có vẻ như nó thực sự là một cách khác để làm điều tương tự với lợi ích của việc ngăn ngừa lỗi khi mã được kết hợp? – Peter

+0

@ ɹǝʇǝd: Vâng, nếu bạn quên dấu chấm phẩy trước điều này, '()' có thể được hiểu là cố gắng gọi hàm. –

+1

'window.ender' là gì? Trong trường hợp nào nó được dân cư? Tôi không thể tìm thấy nhiều thông tin, ngoại trừ mã Bootstrap của khóa học. –

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