Знак доллара перед самостоятельным объявлением анонимной функции в JavaScript?

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

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

и

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

5 ответов


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


$(function() {}); является ярлыком jQuery для

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

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


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


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

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

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

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

"самоисполняющаяся анонимная функция" - то же самое, что и это.

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

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


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

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

(function () {
    // It will invoked instantly after it is created
})();