jquery: помогите узнать разницу между domready и $(function…

Привет, ребята, я нашел очень интересный шаблон веб-сайта, в заголовочном файле которого есть следующие строки:

(function($){
 $(function(){

…normal jquery

 }); // end of document ready
})(jQuery); // end of jQuery name space 

что это значит? Я подумал, что если я хочу использовать domready, я должен написать:

$(document).ready(function(){

в чем разница и можно ли это изменить? Спасибо за помощь


person matt    schedule 07.11.2010    source источник


Ответы (2)


$(function() { — это просто сокращение для $(document).ready(function() {, они эквивалентны. Часть (function($){ .... })(jQuery); предназначена только для совместимости, так что $ является объектом jQuery внутри области видимости (даже если это что-то еще снаружи).

Здесь следует отметить следующее: обработчики document.ready получают jQuery в качестве своего первого аргумента, поэтому код сайта можно было бы выразить более кратко:

jQuery(function($){
  …normal jquery
}); // end of document ready

Итак, ответьте на свой вопрос: вы должны изменить его? нет, используйте тот формат, который вы предпочитаете... Я предпочитаю $(function() { });, потому что его меньше печатать, и я делаю это по сто раз в день. Если вы обнаружите, что $(document).ready(function() { }); намного понятнее, придерживайтесь этого, но они ведут себя одинаково... поэтому используйте то, что понятнее вам и вашей команде.

person Nick Craver    schedule 07.11.2010
comment
думаю, что у вас есть опечатка Ник; должен s/#/$/ там - person p00ya; 07.11.2010
comment
@p00ya - не понял, где? - person Nick Craver; 07.11.2010

Готовая к DOM часть кода, который вы указали:

$(function() {
  // Document is ready let's write some jQuery!
});

Полностью эквивалентен:

$(document).ready(function () {
   // Document is ready let's write some jQuery!  
});

Часть, которая обертывает готовый материал DOM, предназначена для совершенно отдельной цели:

(function($) {
  ...
})(jQuery); // end of jQuery namespace

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

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

person Rob Sobers    schedule 07.11.2010