2012-08-13 28 views
5

Như một ví dụ:jQuery.ready() xử lý cuộc gọi đến chính nó như thế nào?

$(function(){ 
    //do stuff 
    $(function(){ 
     //do other stuff 
    }); 
}); 

Tất nhiên viết ra trong mã này dường như không có ý nghĩa. Nhưng một plugin hoạt động với các phần tử HTML có thể sử dụng .ready() trong khi chính nó được thực thi trên một phần tử trong tập lệnh chính của .ready(). JQuery xử lý chính xác điều này như thế nào? Nó hoạt động rõ ràng, nhưng nó có làm gì đặc biệt không?

Trả lời

2

Nếu .ready() được gọi sau khi DOM được khởi tạo, trình xử lý mới được truyền vào sẽ được thực hiện ngay lập tức.

Điều này có nghĩa rằng khi chức năng đầu tiên được thực hiện, là bên trong sẽ được thực thi ngay lập tức

Bên cạnh đó, jQuery cho phép bạn để ràng buộc nhiều chức năng vào một sự kiện duy nhất và nó sẽ gọi cho họ tất cả (giả định rằng không có một tạo ra một lỗi)

Bạn có thể kiểm tra các hành vi bằng cách thực hiện trên trang đã nạp:

jQuery(document).ready(function(){ 
     for(i=0;i<1000000;i++); 
     console.log('2'); 
    }); 
console.log('1'); 
+1

có "ngay lập tức" như trong _synchronously_ (trước khi '.ready()' lợi nhuận)? – nnnnnn

+0

Có, nó không đồng bộ. Bạn có thể kiểm tra việc thực hiện điều này trên trang đã tải: jQuery (tài liệu) .ready (function() {for (i = 0; i <1000000; i ++) {;}; console.log ('2');}); console.log ('1'); –

+0

Tôi nhận được điều này: 'global .ready() START, 0ms; toàn cầu .ready() END, 8ms; plugin .ready()() START, 11ms; plugin .ready() END, 12ms'. Kết quả là hằng số cho dù tôi gọi các plugin lúc bắt đầu hoặc ở phần cuối của toàn cầu. Vì vậy, các cuộc gọi .ready bên trong các plugin có vẻ để xếp hàng chính nó sau khi đã thực hiện. Đã từ đó nó được gọi là – Armatus

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