我一直在研究一些jQuery插件是如何工作的,我已经看到以下作为整个插件的闭包
$(function(){
// plugin code here
});
(function($){
// plugin code here
})(jQuery);
这两者有什么区别?
答案 0 :(得分:8)
第一个是jQuery DOM Ready函数定义,而第二个是函数闭包,它在解析时立即运行,并以jQuery
对象作为参数执行。
第一个通常用于页面,当您想要执行某些内容时您的页面加载所有文档元素都存在(文档已准备好)。
第二个通常与插件一起使用,因为它会创建一个闭包,因此您可以在其中定义外部代码无法访问的私有。
答案 1 :(得分:3)
第一个是jQuery.ready
的快捷方式。只有当DOM完全准备好被操作时才会调用你给它的函数(当这个脚本第一次运行时通常不会这样;因此回调) - 例如,当你可以通过它们的ID安全地查找元素时,或者CSS选择器,添加新元素等等。
第二个立即运行该函数(可能在DOM准备好被操作之前)并将jQuery
对象作为名为$
的参数传递。在函数中,您可以安全地假设$
引用了jQuery对象,而如果您使用jQuery.noConflict
将$
释放回过去的任何内容,则不能这样做在jQuery加载之前它(可能是Prototype)。当您使用$
编写大量代码时,此技术非常有用,但后来发现您必须与Prototype共存或其他同样想要使用$
的内容。您只需将所有代码放在匿名函数中即可。
如果您愿意,可以同时做两件事:
jQuery(function($) {
// Code that uses `$` and expects the DOM to be ready to be
// manipulated goes here
});