以下函数定义有什么区别?
1:
$(function() {
//stuff here
});
2:
function($){
//stuff here
}
以下函数定义有什么区别?
1:
$(function() {
//stuff here
});
2:
function($){
//stuff here
}
在#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...
})();
...但由于某种原因,前面的例子更常见,即使有点不太清楚。 (我想这是一个短一些的字符。)
此代码调用函数$用匿名函数作为第一个参数。通常当页面被加载时(或者更好地说DOM已经准备就绪),它被用来做某些事情。是的,它会做一些事情,但只有当事件将被解雇。
此代码只是一个参数为$的匿名函数声明。你通常可以在jQuery插件的代码中找到这样的函数。这种技术对本地$ variable有用。这将有助于提高性能,并有助于不污染全球范围。
因此,第一个代码片段将执行一些操作,第二个代码将不会执行任何操作。
感谢您的关注/但是我应该给他们打电话还是他们自己执行! /它们的执行时间有什么区别? – MoonLight 2011-06-02 08:51:34
@LostLord:正如我在我的回答中所说的,第一个会被jQuery调用(在DOM准备好的情况下),第二个如你的问题所示将不会被调用,除非你调用它。 – 2011-06-02 08:54:56
亲爱的@ T.J。 Crowder谢谢你的回答:但是#1&$(document.body).ready有什么区别? – MoonLight 2011-06-02 08:48:14
@LostLord:正如我所说,这只是一个快捷方式,详情请参阅链接。 (但你的意思是'$(document).ready(handler)',而不是'$(document.body).ready(handler)'。) – 2011-06-02 08:49:48
谢谢sir:哪个更好:$(document).ready(handler)或$(document.body)。准备(处理程序)获取元素ID? – MoonLight 2011-06-02 09:17:55