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

3

我一直在研究一些jQuery插件的工作原理,我看到以下代码作为整个插件的闭包。

$(function(){
    // plugin code here

});

(function($){
    // plugin code here

})(jQuery);

这两者之间有什么区别?
2个回答

8
第一个是 jQuery DOM Ready 函数定义,而第二个是一个函数闭包,在解析时立即运行并以 jQuery 对象作为参数执行。
通常情况下,在页面加载完成时(文档已准备好)执行某些操作时会使用第一个函数
在插件中通常使用第二个函数,因为它创建了一个闭包,这样您可以在其中定义私有属性,而这些私有属性不会被外部代码访问到。

2
我知道你的意思,但有点含糊不清。第一个在DOM准备就绪时执行(所有HTML元素都存在)。第二个立即执行(一旦解析完成)。“当页面加载”有点令人困惑。 - Andrew Bullock
@Andrew:我想对那些不太了解 DOM、Javascript 和 jQuery 的人简化一下,因为这从问题中很明显。但我修改了我的答案。所以谢谢你。 - Robert Koritnik

3
第一个是jQuery.ready的快捷方式。它只在DOM完全准备好被操作时调用你提供的函数(当此脚本首次运行时通常不是这样,因此需要回调)-例如,当您可以安全地按其ID或CSS选择器查找元素,添加新元素等等。
第二个立即运行函数(可能在DOM准备好被操作之前)并将jQuery对象作为名为$的参数传递。在函数内部,您可以安全地假定$引用jQuery对象,而没有此选项,如果您正在使用jQuery.noConflict来将$释放回到以前拥有它的东西(也许是Prototype),则不能。当您有很多使用$编写的代码,但随后发现必须与Prototype或其他也想使用$的内容共存时,此技术非常有用。您只需将所有代码放在匿名函数中即可。
如果您愿意,可以同时执行两件事:
jQuery(function($) {
    // Code that uses `$` and expects the DOM to be ready to be
    // manipulated goes here
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接