2017-09-22 51 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可以安全操作时运行您的代码。