jQuery新手:jQuery(function($){...})是什么意思?

时间:2011-06-23 13:16:40

标签: jquery jquery-ui jquery-selectors

我知道在jQuery中,$(callback)jQuery(callback)相同,效果与$(document).ready()相同。

怎么样

jQuery(function($) {

 });

有人可以向我解释一下这种功能是什么意思吗?

它做什么?

这个和$(callback)之间有什么区别?

这个和$(function())之间有什么区别?

5 个答案:

答案 0 :(得分:16)

jQuery(function($) {

});

是这三者中最安全的版本。它使$成为局部变量,从而优雅地避免与可能使用$符号的任何其他变量发生冲突。

我认为它最近也被添加了,不记得以前看过了。

这些函数都做同样的事情 - 在DOM准备好时执行一些代码。 $(document).ready(function(){})是原始的,它与底层的JavaScript API相匹配。

接受函数作为参数的“$”和“jQuery”被创建为快捷方式,以避免重复这样的常见构造。接受一个接受$作为其第一个参数的函数是一个进一步的语法糖 - 现在你可以方便地完成闭包而无需自己动手。

答案 1 :(得分:16)

  • $(function())是语法错误。
  • $()创建一个空的jQuery对象。
  • $(document).ready(function() { ... })在DOM准备就绪时执行给定的函数
  • $(function() { ... })是同一件事的快捷方式
  • jQuery(function($) { ... })也是这样做的,但它也使$在函数内部可用,无论它设置在外面。

答案 2 :(得分:2)

所以我对此进行了更正,如果您阅读第一条评论,则会给出一些背景信息。

jQuery(function() {
    // Document Ready
});


(function($) {
    // Now with more closure!
})(jQuery);

我不是100%肯定,但我认为这只是将jQuery对象传递给闭包。我会在谷歌上挖掘一下,看看我是对还是错,并会相应更新。

编辑:

我非常正确,但这里直接来自他们的网站:

http://docs.jquery.com/Plugins/Authoring

“我知道并喜欢的令人敬畏的美元符号在哪里?它仍然存在,但要确保您的插件不会与可能使用美元符号的其他库发生碰撞,将jQuery传递给自己是最佳做法执行将其映射到美元符号的函数(闭包),以便它不能被执行范围内的另一个库覆盖。“

答案 3 :(得分:1)

当您调用主jQuery工厂函数(jQuery(<something>)或公共快捷方式$(<something>))时,它会根据<something>的类型决定要执行的操作。

如果您将字符串作为<something>传递,则假定它是一个选择器规范,并将返回与该选择器匹配的元素的jQuery列表。

如果传递一个jQuery对象(表示一个元素列表,即从之前调用jQuery返回的对象),它将返回该对象(实质上这是一个非操作)。

如果您传递一个DOM元素,它将返回一个仅包含该元素的jQuery列表(因此您可以将jQuery方法应用于该元素)。这就是$(document).ready()正在发生的事情 - 你将工厂函数传递给DOM元素“document”,它返回一个表示该元素的jQuery对象,并使用该对象的ready()方法向该元素添加一个事件处理函数。列表中所有DOM元素的就绪事件(在这种情况下只有一个document)。

如果你传递一个函数,这只是“当你已经准备就绪时运行它”的简写,所以$(function() { ... });相当于$(document).ready(function() { ... });

答案 4 :(得分:0)

首先,jQuery()$(document).ready()

不同

$()jQuery()

的快捷方式

和...

$(function(){ ...});$(document).ready(function(){ ... });

的快捷方式

因此:

jQuery(function(){ ... }) 

功能与

相同
$(document).ready(function({ ... });

<强>可是...

jQuery('#foo').css("background-color", "#f00");

的功能不同
$(document).ready('#foo').css("background-color", "#f00");

所以......

jQuery() $(document).ready()

相同