2011-06-02 60 views
4

以下函数定义有什么区别?

1:

$(function() { 
    //stuff here 
}); 

2:

function($){ 
    //stuff here 
} 

回答

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... 
})(); 

...但由于某种原因,前面的例子更常见,即使有点不太清楚。 (我想这是一个短一些的字符。)

+0

亲爱的@ T.J。 Crowder谢谢你的回答:但是#1&$(document.body).ready有什么区别? – MoonLight 2011-06-02 08:48:14

+0

@LostLord:正如我所说,这只是一个快捷方式,详情请参阅链接。 (但你的意思是'$(document).ready(handler)',而不是'$(document.body).ready(handler)'。) – 2011-06-02 08:49:48

+0

谢谢sir:哪个更好:$(document).ready(handler)或$(document.body)。准备(处理程序)获取元素ID? – MoonLight 2011-06-02 09:17:55

3
  1. 此代码调用函数$用匿名函数作为第一个参数。通常当页面被加载时(或者更好地说DOM已经准备就绪),它被用来做某些事情。是的,它会做一些事情,但只有当事件将被解雇。

  2. 此代码只是一个参数为$的匿名函数声明。你通常可以在jQuery插件的代码中找到这样的函数。这种技术对本地$ variable有用。这将有助于提高性能,并有助于不污染全球范围。

因此,第一个代码片段将执行一些操作,第二个代码将不会执行任何操作。

+0

感谢您的关注/但是我应该给他们打电话还是他们自己执行! /它们的执行时间有什么区别? – MoonLight 2011-06-02 08:51:34

+0

@LostLord:正如我在我的回答中所说的,第一个会被jQuery调用(在DOM准备好的情况下),第二个如你的问题所示将不会被调用,除非你调用它。 – 2011-06-02 08:54:56