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

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

怎么样

 jQuery(function($) { }); 

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

它有什么作用?

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

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

 jQuery(function($) { }); 

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

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

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

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

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

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

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

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

编辑:

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

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

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

当你调用主jQuery工厂函数(作为jQuery()或公共快捷方式$() )时,它根据的类型决定要做什么。

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

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

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

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

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

$()jQuery()的快捷方式

和…

$(function(){ ...});$(document).ready(function(){ ... });的快捷方式$(document).ready(function(){ ... });

从而:

 jQuery(function(){ ... }) 

function与…相同

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

但…

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

不会起到相同的作用

 $(document).ready('#foo').css("background-color", "#f00"); 

所以…

jQuery()$(document).ready()