2010-07-15 2 views
120

В чем разница между этими двумя.jQuery document.ready vs self-call анонимная функция

  1. $(document).ready(function(){ ... });

  2. (function(){ ... })();

Являются ли эти обе функции вызываются в то же время? Я знаю, document.ready будет запущен, когда вся HTML-страница будет отображаться браузером, но что касается 2-й функции (анонимная функция самозапуска). Подождите, пока браузер не выполнит рендеринг страницы или вызывается всякий раз, когда он встречается?

+15

Для чего это стоит, '$ (функция() {});' эквивалентно '$ (документ) .ready (функция() {});' –

+1

Самость вызова анонимной функции будет выполняться когда это встречается. Кроме того, фактическое отображение документа на экране и создание объектной модели в памяти не связаны. – Anurag

+0

related: [Зачем определять анонимную функцию и передавать ее jQuery в качестве аргумента?] (Http://stackoverflow.com/q/10371539/1048572), на каком шаблоне использовать магистрали – Bergi

ответ

15

document.ready run после DOM «построен». Самозапускающиеся функции запускаются мгновенно - если они вставлены в <head>, до создания DOM.

+5

+1 чтобы противостоять ненужному нисходящему потоку. Однако в вашем ответе есть небольшая проблема. Функция самозапуска будет выполняться везде, где она будет найдена при разборе, и не обязательно должна находиться внутри '', а правила не будут отличаться после того, как будет создана первоначальная DOM. – Anurag

41

(function(){...})(); будет выполнен, как только он встретится в Javascript.

$(document).ready() будет выполнен после загрузки документа. $(function(){...}); является ярлыком для $(document).ready() и делает то же самое.

106
  • $(document).ready(function(){ ... });или короткое$(function(){...});

    Эта функция вызывается, когда DOM is ready, который означает, что вы можете начать запроса элементы для экземпляра. .ready() будет использовать разные способы работы в разных браузерах, чтобы убедиться, что DOM действительно готов.

  • (function(){ ... })();

    Это не что иное, как функция, которая вызывает сам себя как можно скорее, когда браузер интерпретирует ваш ecma-/javascript. Поэтому очень маловероятно, что вы можете успешно действовать на DOM elements здесь.

+3

@phpGeek вы противоположны справа – NimChimpsky

+1

@NimChimpsky I confused (function() {}); с $ (function() {}). Вы противоположны неправильному;) – ALH

+0

Я запутался в отношении '(function() {...})();' не запускается какой-либо JS-код как можно скорее? Если бы вы сказали, что 'alert()' внутри в SIAF или вне его, не будет ли эффект таким же? – skube

23
  1. $(document).ready(function() { ... }); просто связывает эту функцию в ready случае документа, так, как вы сказали, когда документ загружается, событие срабатывает.

  2. (function($) { ... })(jQuery); фактически конструкт Javascript, и все, что часть кода делает передать jQuery объект в function($) в качестве параметра и запускает функцию, поэтому внутри этой функции, $ всегда относится к jQuery объекта. Это может помочь разрешить конфликты именования и т.д.

Итак # 1 выполняется, когда документ загружен, в то время как # 2 выполняется немедленно, с jQuery объекта с именем $ как стенография.

18

Следующий код будет выполнен, когда DOM (Document object model) готова для выполнения кода JavaScript.

$(document).ready(function(){ 
    // Write code here 
}); 

Короткая рука для приведенного выше кода:

$(function(){ 
    // write code here 
}); 

Код, приведенный ниже, является самостоятельным вызовом функции анонимным JavaScript, и будет выполнен, как только браузер интерпретирует его:

(function(){ 
    //write code here 
})(); // It is the parenthesis here that call the function. 

Функция самозапускания jQuery, показанная ниже, передает глобальный объект jQuery в качестве аргумента в function($) , Это позволяет использовать $ локально в функции самозапуска, не требуя , чтобы пройти глобальную область определения. jQuery - не единственная библиотека, которая использует $, поэтому этот уменьшает потенциальные конфликты имен.

(function($){ 
    //some code 
})(jQuery); 
+2

Очень простое, четкое и краткое описание закрытия javascript. –

Смежные вопросы