这是双文件吗?

时间:2013-01-16 15:40:07

标签: javascript jquery dom document

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

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


       ... bla bla bla ...

    });
}) (jQuery);

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

6 个答案:

答案 0 :(得分:3)

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

jQuery plugin authoring文档中建议使用此特定模式:

  

[创作插件时] 最佳做法是将jQuery传递给IIFE(立即调用的函数表达式),将其映射到美元符号,以便它不会被其他库覆盖执行范围。

(function( $ ) {
  $.fn.myPlugin = function() {

   // Do your awesome plugin stuff here

 };
})( jQuery );

答案 1 :(得分:2)

  

(function($){}) (jQuery);$(function () {});相同吗?

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

第二个是the shorthand for binding a document ready handler和jQuery。

更多阅读:

答案 2 :(得分:2)

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

答案 3 :(得分:2)

都能跟得上

(function(){})();
浏览器遇到该脚本后立即执行

。 .ready()是在解析整个文档后触发的事件

答案 4 :(得分:1)

不,不是。它是一个封闭,里面有一个文档就绪处理程序。它用于确保机箱中的$是为jQuery保留的,并且不会干扰任何其他库。

答案 5 :(得分:0)