我知道在jQuery中,$(callback)
与jQuery(callback)
相同,效果与$(document).ready()
相同。
怎么样
jQuery(function($) {
});
有人可以向我解释一下这种功能是什么意思吗?
它做什么?
这个和$(callback)
之间有什么区别?
这个和$(function())
之间有什么区别?
答案 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()