$ (документ). вже скорочення


245

Чи є наступна стенограма для $(document).ready?

(function($){

//some code

})(jQuery);

Я бачу, що ця модель використовується багато, але я не можу знайти жодної посилання на неї. Якщо це скорочення $(document).ready(), чи є якась конкретна причина, що вона може не працювати? У моїх тестах, здається, завжди стріляють перед готовою подією.


Будь-яка змінна, визначена всередині згаданої функції шаблону (наприклад var somevar;), не змінить вміст однойменних змінних за межами функції
Timo Huovinen

3
Код має на увазі забезпечення $ представляє jQuery у цьому функціональному блоці, тому код є переносним у місцях, де псевдонім $ jQuery відключений або визначений як щось інше.
AsksAnyway

Відповіді:


253

Скорочення для $(document).ready(handler)є $(handler)(де handlerфункція). Дивіться тут .

Код у вашому запитання не має нічого спільного .ready(). Швидше, це вираз функції, що викликається негайно (IIFE), з об'єктом jQuery як аргументом. Його мета - обмежити область принаймні $змінної своїм блоком, щоб не викликати конфліктів. Зазвичай ви бачите шаблон, використовуваний плагінами jQuery для забезпечення цього $ == jQuery.


14
Технічно це вираз функції, що викликається негайно . Якби це було самовикликанням, воно викликало би себе зсередини. Шукайте в Інтернеті iifeабо переходьте до відомого блогу ковбоя Альмана . Детальніше… sheesh.
2540625

546

Скорочення:

$(function() {
    // Code here
});

24
Перший аргумент - це $. Можливо, хочу додати це. Це корисно дляjQuery(function($, undefined) {});
Рейнос

5
@raynos Його не потрібно. наведений вище код чудово працює як псевдонім для$(document).ready(function(){ });
Кайл Трауберман

10
Просто корисно знати, що ви отримуєте $безкоштовно як перший аргумент.
Райнос

3
Я досі відвідую цю відповідь раз на місяць або близько того.
Nugsson

89

Правильна стенограма така:

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

Код, який ви опублікували…

(function($){

//some code

})(jQuery);

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


4
Можна сказати, що він також гарантує, що $ є псевдонімом jQuery, якщо завантажуються інші інструменти, які також використовують $ як псевдонім
Jim Wolff

16

Це не скорочення $(document).ready().

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

Тут задокументовано: http://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/#use-an-immediate-invoked-function-expression


Дякуємо, що відповіли на питання
MarcGuay

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.