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


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.


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


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);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.