Знак доллара перед самопровозглашенной анонимной функцией в JavaScript?

В чем разница между этими двумя:

$(function () {
    // do stuff
});

А ТАКЖЕ

(function () {
    // do stuff
})();

person xil3    schedule 30.09.2011    source источник


Ответы (5)


Первый использует jQuery для привязки функции к событию document.ready. Второй объявляет и немедленно выполняет функцию.

person g.d.d.c    schedule 30.09.2011
comment
Ах, хорошо, так что основное отличие в том, что второй не ждет завершения загрузки документа, а сразу же выполняется? - person xil3; 30.09.2011
comment
@ xil3 - правильно. Первый подходит, если функции необходимо изменить DOM. Второй полезен, если вам просто нужны эффекты JS. Редко они взаимозаменяемы, но обычно предпочтительнее первый, потому что большая часть кода jQuery используется для управления элементами DOM. - person g.d.d.c; 30.09.2011

$(function() {}); — это ярлык jQuery для

 $(document).ready(function() { 
     /* Handler for .ready() called. */ 
 });

В то время как (function() {})(); является мгновенно вызываемым функциональным выражением или IIFE. Это означает, что это выражение (а не оператор), и оно вызывается сразу после создания.

person voigtan    schedule 30.09.2011
comment
*самостоятельная анонимная функция - person aziz punjani; 30.09.2011
comment
Я бы предпочел, чтобы они вызывались немедленно, а не выполнялись сами или вызывались самостоятельно. Например, (function () { arguments.callee() })() будет самовыполняющейся/вызывающей анонимной функцией, а (function(){})() — просто анонимной функцией, которая вызывается немедленно. См.: benalman.com/news/2010/11/< /а> - person nwellcome; 30.09.2011

Обе они являются анонимными функциями, но (function(){})() вызывается сразу, а $(function(){}) вызывается, когда документ готов.

jQuery работает примерно так.

window.jQuery = window.$ = function(arg) {
    if (typeof arg == 'function') {
        // call arg() when document is ready
    } else {
       // do other magics
    }
}

Итак, вы просто вызываете функцию jQuery и передаете функцию, которая будет вызываться при готовности документа.

«Самозапускающаяся анонимная функция» аналогична этому.

function a(){
    // do stuff
}
a();

Единственная разница в том, что вы не загрязняете глобальное пространство имен.

person timrwood    schedule 30.09.2011

одна из них — функция jquery $(document).ready, а другая — просто анонимная функция, которая вызывает сама себя.

person nathan gonzalez    schedule 30.09.2011
comment
На самом деле это не закрытие. Просто самовызывающаяся анонимная функция. Ни один из них не является закрытием. См.: stackoverflow.com/questions/111102/ - person gilly3; 30.09.2011

$(function () {
    // It will invoked after document is ready
});

Выполнение этой функции после того, как документы будут готовы, означает, что весь HTML должен быть загружен до его выполнения, но во втором случае функция вызывается сразу после его создания.

(function () {
    // It will invoked instantly after it is created
})();
person shekhardtu    schedule 16.11.2016