$ (tài liệu). đã viết tốc ký


245

Là tốc ký sau đây cho $(document).ready?

(function($){

//some code

})(jQuery);

Tôi thấy mô hình này được sử dụng rất nhiều, nhưng tôi không thể tìm thấy bất kỳ tài liệu tham khảo nào về nó. Nếu nó là tốc ký $(document).ready(), có lý do cụ thể nào nó có thể không hoạt động không? Trong các thử nghiệm của tôi, nó dường như luôn luôn cháy trước sự kiện sẵn sàng.


Bất kỳ biến nào được xác định bên trong hàm mẫu đã đề cập (ví dụ var somevar;) sẽ không thay đổi nội dung của các biến có cùng tên bên ngoài hàm
Timo Huovinen 16/12/13

3
Mã này có tác dụng đảm bảo $ đại diện cho jQuery trong khối chức năng đó để mã có thể di chuyển đến những nơi mà bí danh $ cho jQuery bị vô hiệu hóa hoặc được định nghĩa là một thứ khác.
AsksAnyway

Câu trả lời:


252

Tốc ký cho $(document).ready(handler)$(handler)(nơi handlerlà một chức năng). Xem tại đây .

Mã trong câu hỏi của bạn không có gì để làm với .ready(). Thay vào đó, nó là một biểu thức hàm được gọi ngay lập tức (IIFE) với đối tượng jQuery làm đối số của nó. Mục đích của nó là hạn chế phạm vi của ít nhất $biến thành khối riêng của nó để nó không gây ra xung đột. Bạn thường thấy mẫu được sử dụng bởi các plugin jQuery để đảm bảo điều đó $ == jQuery.


14
Về mặt kỹ thuật, nó là một biểu thức hàm được gọi ngay lập tức . Nếu nó tự gọi, nó sẽ tự gọi mình từ bên trong chính nó. Tìm kiếm trên web iifehoặc bỏ qua bài viết blog nổi tiếng của Cowboy Alman . Thông tin chi tiết về sheesh.
2540625

546

Tốc ký là:

$(function() {
    // Code here
});

24
Đối số đầu tiên là $. Có thể muốn thêm nó vào. Nó hữu ích chojQuery(function($, undefined) {});
Raynos

5
@raynos Nó không bắt buộc. đoạn mã trên hoạt động tốt như một bí danh cho$(document).ready(function(){ });
Kyle Trauberman

10
Thật hữu ích khi biết rằng bạn nhận được $miễn phí như là đối số đầu tiên.
Raynos

3
Tôi vẫn truy cập câu trả lời này mỗi tháng một lần hoặc lâu hơn.
Nugsson

89

Tốc ký chính xác là đây:

$(function() {
    // this behaves as if within document.ready
});

Mã bạn đã đăng

(function($){

//some code

})(jQuery);

Sọ tạo ra một hàm ẩn danh và thực thi nó ngay lập tức jQuerykhi được truyền vào dưới dạng đối số $. Tất cả những gì nó thực hiện là lấy mã bên trong hàm và thực thi nó như bình thường, vì $đã là bí danh cho jQuery. : D


4
Bạn có thể nói rằng nó cũng đảm bảo rằng $ là bí danh của jQuery, nếu các công cụ khác cũng sử dụng $ làm bí danh được tải
Jim Wolff

16

Đây không phải là một tốc ký cho $(document).ready().

Mã bạn đã đăng các hộp bên trong mã và làm cho jQuery có sẵn như $không gây ô nhiễm không gian tên toàn cầu. Điều này có thể được sử dụng khi bạn muốn sử dụng cả nguyên mẫu và jQuery trên một trang.

Tài liệu ở đây: http://learn.jquery.com/USE-jquery-core/avoid-conflicts-other-lologists/#use-an-immediately-invoking-feft-expression


Cảm ơn bạn đã trả lời câu hỏi
MarcGuay

12

Các dòng cụ thể này là trình bao bọc thông thường cho các trình cắm jQuery:

"... Để đảm bảo rằng plugin của bạn không va chạm với các thư viện khác có thể sử dụng ký hiệu đô la, cách tốt nhất là chuyển jQuery sang chức năng tự thực thi (đóng) ánh xạ nó sang ký hiệu đô la để nó có thể ' t được ghi đè bởi một thư viện khác trong phạm vi thực hiện của nó. "

(function( $ ){
  $.fn.myPlugin = function() {
    // Do your awesome plugin stuff here
  };
})( jQuery );

Từ http://docs.jquery.com/Plugins/Authoring


11

Tốc ký an toàn đa khung để sẵn sàng là:

jQuery(function($, undefined) {
    // $ is guaranteed to be short for jQuery in this scope
    // undefined is provided because it could have been overwritten elsewhere
});

Điều này là do jQuery không phải là khung duy nhất sử dụng các biến $undefined


cũng có thể được viết là(function($){ ... })(jQuery);
Mike Causer

2
@MikeCauser cũng là một cách tiếp cận tốt, nhưng nó sẽ không được gọi ready, thay vào đó nó được gọi ngay lập tức
Timo Huovinen

5

Thậm chí biến thể ngắn hơn là sử dụng

$(()=>{

});

trong đó $viết tắt của jQuery và ()=>{}được gọi là 'hàm mũi tên' kế thừa thistừ bao đóng. (Vì vậy, trong đó thisbạn có thể sẽ có windowthay vì document.)


0

Cái này thì sao?

(function($) { 
   $(function() {
     // more code using $ as alias to jQuery
     // will be fired when document is ready
   });
})(jQuery);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.