2

我正在使用脚本并找到以下内容,我真的找不到任何关于它的含义的信息

(function($) {
    $(document).ready(function(e) {


       ... bla bla bla ...

    });
}) (jQuery);

(function($){}) (jQuery);一样的$(function () {});吗?如果是这样,为什么有人会定义两次document.ready

4

6 回答 6

3

不,不一样。它是一个匿名函数,它被传递给 jQuery 对象,以确保它可以作为$函数范围内的局部变量使用,即使全局变量$被另一个库覆盖。$(function () { })它与和完全不同$(document).ready(function () { })

在jQuery 插件编写文档中推荐使用这种特定模式:

[创作插件时]最好将 jQuery 传递给 IIFE(立即调用函数表达式),将其映射到美元符号,这样它就不会在其执行范围内被另一个库覆盖。

(function( $ ) {
  $.fn.myPlugin = function() {
 
   // Do your awesome plugin stuff here

 };
})( jQuery );
于 2013-01-16T15:42:13.377 回答
2

(function($){}) (jQuery);一样的$(function () {});吗?

不。第一个是立即调用匿名函数,主要用于防止全局范围的污染。在这种情况下,它还用于确保它$是对 的引用jQuery,而不用担心会覆盖$其他地方。

第二个是用 jQuery绑定文档就绪处理程序的简写。

更多阅读:

于 2013-01-16T15:42:14.803 回答
2

不,它不是,(function($){}) (jQuery);是一个 IIFE(立即调用的函数表达式)将 jQuery 作为参数传递并使用$在函数范围内表示它,因此如果在$不使用 jQuery.noConflict 的情况下加载另一个使用的库,则不会发生冲突。

于 2013-01-16T15:43:02.523 回答
2

没有

(function(){})();

浏览器遇到该脚本时立即执行。.ready() 是整个文档解析完成后触发的事件

于 2013-01-16T15:45:23.873 回答
1

不,这不对。它是一个内部带有文档就绪处理程序的闭包。它用于确保$外壳内的内容是为 jQuery 保留的,并且不会干扰任何其他库。

于 2013-01-16T15:42:22.557 回答
0

这里有一个很好的清晰解释;

http://jquery-howto.blogspot.com/2008/12/what-heck-is-function-jquery.html

于 2013-01-16T15:44:14.233 回答