以下函数定义有什么区别?
1:
$(function () {
//stuff here
});
2:
function($){
//stuff here
}
答案 0 :(得分:9)
在#1中,当DOM准备就绪时,jQuery将调用你的函数;将函数传递到$()
是$(document).ready(function() { ... });
(details here)的快捷方式。
在#2中,你正在定义一个函数,但既没有调用它也没有要求jQuery调用它。 (事实上,如图所示,这是一个语法错误 - 您需要将其分配给某个东西或调用它以使其在没有名称的情况下有效。)您所引用的任何内容都不会执行这个功能,你必须自己调用它。
在#2上,你可能看到的成语是:
(function($) {
// ...code using `$` for jQuery here...
})(jQuery);
当您希望代码立即运行(不等待DOM就绪)时,您要做的是相当标准的事情,并且您希望在函数中使用$
来引用jQuery,但是您希望成为与noConflict
模式兼容。你在插件中看到了很多。它定义了一个接受$
参数的函数,shadows任何$
全局定义,然后立即调用传递jQuery
的函数作为参数。因此,即使$
未全局映射到jQuery
,它也会在该函数中执行。你可以这样做:
(function() {
var $ = jQuery;
// ...code using `$` for jQuery here...
})();
...但由于某种原因,早期的例子更为常见,即使有点不太清楚。 (我想,这是一些较短的字符。)
答案 1 :(得分:3)
此代码将函数$与匿名函数作为第一个参数调用。通常它用于在加载页面时执行某些操作(或者更好地说DOM已准备就绪)。是的,它会做一些事情,但只有当事件被解雇时才会发生。
此代码只是一个带有一个参数$的匿名函数的声明。你经常可以在jQuery插件的代码中找到这样的函数。这种技术对于在本地使用$ variable非常有用。这将提高性能并有助于不污染全球范围。
因此,第一个片段将执行某些操作,第二个片段将无效。