$ (документ). уже стенография - PullRequest
229 голосов
/ 14 мая 2011

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

(function($){

//some code

})(jQuery);

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

Ответы [ 8 ]

518 голосов
/ 14 мая 2011

Сокращение:

$(function() {
    // Code here
});
243 голосов
/ 14 мая 2011

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

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

85 голосов
/ 14 мая 2011

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

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

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

(function($){

//some code

})(jQuery);

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

16 голосов
/ 14 мая 2011

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

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

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

12 голосов
/ 14 мая 2011

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

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

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

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

10 голосов
/ 16 декабря 2013

Сокращения для многофреймовой безопасности для готовности:

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

1 голос
/ 05 октября 2018

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

$(()=>{

});

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

0 голосов
/ 23 июля 2016

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

(function($) { 
   $(function() {
     // more code using $ as alias to jQuery
     // will be fired when document is ready
   });
})(jQuery);
...