$ (документ). уже стенография

245

Является ли следующий сокращение для $(document).ready?

(function($){

//some code

})(jQuery);

Я вижу, что этот шаблон часто используется, но я не могу найти ссылку на него. Если это условное обозначение $(document).ready(), есть ли какая-то конкретная причина, по которой он может не работать? В моих тестах он всегда срабатывает перед готовым событием.

Марк Браун
источник
Любая переменная, определенная внутри упомянутой шаблонной функции (например var somevar;), не изменит содержимое переменных с тем же именем вне функции
Тимо Хуовинен
3
Код обеспечивает то, что $ представляет jQuery в этом функциональном блоке, поэтому код переносим в места, где $ alias для jQuery отключен или определен как что-то другое.
AsksAnyway

Ответы:

253

Сокращение для $(document).ready(handler)IS $(handler)(где handlerесть функция). Смотрите здесь .

Код в вашем вопросе не имеет ничего общего с .ready(). Скорее, это выражение для немедленного вызова функции (IIFE) с объектом jQuery в качестве аргумента. Его цель состоит в том, чтобы ограничить область действия, по крайней мере, $переменной до ее собственного блока, чтобы она не вызывала конфликтов. Обычно вы видите шаблон, используемый плагинами jQuery для этого $ == jQuery.

BoltClock
источник
14
Технически это сразу вызванное выражение функции . Если бы он вызывал себя сам, он вызывал бы себя изнутри себя. Ищите в Интернете iifeили переходите к известной записи в блоге Cowboy Alman . Подробнее ... Sheesh.
2540625 22.10.14
546

Сокращение:

$(function() {
    // Code here
});
Кайл Трауберман
источник
24
Первый аргумент $. jQuery(function($, undefined) {});
Могу
5
@raynos Это не обязательно. вышеприведенный код отлично работает как псевдоним для$(document).ready(function(){ });
Кайл Трауберман
10
Просто полезно знать, что вы получаете $бесплатно в качестве первого аргумента.
Raynos
3
Я до сих пор посещаю этот ответ раз в месяц или около того.
Нугссон
89

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

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

Код, который вы разместили ...

(function($){

//some code

})(jQuery);

... создает анонимную функцию и выполняет ее немедленно jQuery, передавая в качестве аргумента arg $. Все, что он делает, - это берет код внутри функции и выполняет его как обычно, поскольку $он уже является псевдонимом для jQuery. : D

Гордон Густафсон
источник
4
Можно сказать, что он также гарантирует, что $ является псевдонимом для jQuery, если загружены другие инструменты, которые также используют $ в качестве псевдонима
Jim Wolff
16

Это не сокращение для $(document).ready().

Код, который вы разместили, упаковывает внутренний код и делает jQuery доступным, $не загрязняя глобальное пространство имен. Это можно использовать, когда вы хотите использовать как прототип, так и jQuery на одной странице.

Документально здесь: http://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/#use-an-immediately-invoked-function-expression

самий-делюкс
источник
Спасибо, что
ответили
12

Эти конкретные строки являются обычной оболочкой для плагинов jQuery:

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

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

С http://docs.jquery.com/Plugins/Authoring

morgar
источник
11

Многофункциональная безопасная стенограмма для готовых:

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

Это происходит потому , что Jquery не только структура , которая использует $и undefinedпеременные

Тимо Хуовинен
источник
также может быть написано как(function($){ ... })(jQuery);
Майк Козер
2
@MikeCauser также хороший подход, но он не будет вызываться ready, вместо этого он вызывается немедленно
Тимо Хуовинен
5

Еще более короткий вариант - использовать

$(()=>{

});

где $обозначает jQuery и ()=>{}является так называемой «функцией стрелки», которая наследуется thisот замыкания. (Так что у thisвас, вероятно, будет windowвместо document.)

Эдвард Рейтар
источник
0

Как насчет этого?

(function($) { 
   $(function() {
     // more code using $ as alias to jQuery
     // will be fired when document is ready
   });
})(jQuery);
Р. Н. Кушваха
источник