2017-09-22 54 views
0

我有以下的插件,它是工作:刪除(jQuery的)

(function ($) { 

    $.fn.slider = function (options) { 

    var defaults = { 
     pause: 8000 
    }; 

    var options = $.extend({}, defaults, options); 

    $(this).each(function() { 

     // Ommited code for simplicity  

    }); 

    return this; 

    }; 

})(jQuery); 

如果我改變第一和最後一行:

$(function() { 
    // Inner code 
}); 

不應該在該工作?我最終需要(JQuery)嗎?

我認爲有一種格式,最後不需要(jQuery)。

我錯過了什麼?

回答

1

您將插件的創建與使用jQuery本身混淆在一起。此語法:

$(function() { 
    //... 
}); 

告訴jQuery在DOM準備好時調用該函數。而此語法:

(function ($) { 
    //... 
})(jQuery); 

立即調用函數,並將其傳遞jQuery對象,作爲$參數來使用。您可以省略它:

(function() { 
    //... 
})(); 

然而,這不再是獨立的,運行不工作,如果$是有史以來以外的任何其他jQuery對象的風險。其他插件和庫本身可能會使用$,但它們本身不太可能使用變量jQuery

創建插件時,您希望立即調用它,而不是等到DOM準備就緒。這樣,使用該插件的其他代碼將能夠使用它並避免加載代碼的競爭條件。

1

您的第一個示例在IIFE(立即調用的函數表達式)中運行jQuery。沒有什麼不對,它可以防止與其他使用$的庫衝突或衝突。第二個示例只是jQuery的document.ready function的簡寫方法,它在DOM可以安全操作時運行您的代碼。