我有以下插件正在运行:
(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)。
我错过了什么?
答案 0 :(得分:1)
您在IIFE(立即调用的函数表达式)中运行jQuery的第一个示例。没有错,它可以防止与也使用$
的其他库发生冲突或冲突。第二个例子只是jQuery document.ready function的简写方法,当DOM可以安全操作时,它会运行你的代码。
答案 1 :(得分:1)
使用jQuery本身混淆了插件的创建。语法如下:
$(function () {
//...
});
告诉jQuery在DOM准备好时调用该函数。这种语法:
(function ($) {
//...
})(jQuery);
立即调用该函数并将其传递给jQuery对象,以用作$
参数。你可以省略它:
(function () {
//...
})();
然而,这不再是自包含的,并且如果$
除了jQuery对象之外还有其他任何东西,则存在无法工作的风险。其他插件和库本身可能使用$
,但不太可能自己使用变量jQuery
。
创建插件时,您希望立即调用它,而不是等到DOM准备就绪。这样,使用该插件的其他代码将能够使用它并避免使用加载代码的竞争条件。