Готовы ли самозапускающиеся функции в DOM? - PullRequest
7 голосов
/ 28 августа 2011

Прежде, чем я услышал о самозапускающихся функциях, я всегда делал это:

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

function doSomething()
{
   // blah
}

Будет ли самовыполняющаяся функция иметь такой же эффект?будет ли он работать на DOM готов?

(function doSomething($) {
   // blah
})(jQuery);

Ответы [ 5 ]

10 голосов
/ 28 августа 2011

Неа. Самостоятельно выполняющаяся функция запускается, когда механизм Javascript находит ее.

Однако, если вы поместите весь свой код в конец документа перед закрывающим тегом </body> (который настоятельно рекомендуется ), вам не нужно ждать готовности DOM, когда вы пройдете это автоматически.


Если все, что вам нужно, это охватить переменную $, и вы не хотите перемещать свой код вниз страницы, вы можете использовать это:

jQuery(function($){
    // The "$" variable is now scoped in here
    // and will not be affected by any code
    // overriding it outside of this function
});
1 голос
/ 28 августа 2011

Не будет, он будет запущен, как только будет выполнен файл JavaScript.

0 голосов
/ 28 августа 2011

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

(function($) { ... })(jQuery);

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

Таким образом, # 1 выполняется при загрузке документа, а # 2 запускается немедленно, с объектом jQuery с именем $ в качестве сокращения

$(document).ready(function(){ ... }); or short $(function(){...});

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

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

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

jQuery document.ready против самостоятельного вызова анонимной функции

0 голосов
/ 28 августа 2011

Нет, самовыполняющаяся функция запускается сразу после того, как вы "объявите" ее в своем коде.Даже если он находится во внешнем файле .js.

В вашем примере существует вероятность того, что ваша функция будет выполнена, и значение jQuery равно undefined .Если вы хотите, чтобы ваш код выполнялся в DOMReady, продолжайте использовать

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

или

$(function(){
    doSomething();
});

или даже

window.onload = function(){
    doSomething();
}
0 голосов
/ 28 августа 2011

Нет, тут же запускаются самовыполняющиеся функции javascript.

Если вы хотите создать функцию, готовую к DOM, напишите следующее:

$(function() {
  // this will run on DOM ready
});

Это сокращение от:

$(document).ready(function() {
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...