这两个javascript函数有什么区别?

时间:2010-05-18 10:35:22

标签: javascript jquery closures

我一直在研究一些jQuery插件是如何工作的,我已经看到以下作为整个插件的闭包

$(function(){
    // plugin code here

});

(function($){
    // plugin code here

})(jQuery);

这两者有什么区别?

2 个答案:

答案 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
});