是这个jQuery代码吗

(function(jQuery){
})(jQuery);

相当于

$(document).ready(function () {
});

如果是,两者之间有什么区别?如果没有,第一个做什么?

编辑:

谢谢大家。大多数响应与不同的口味和样品相似

有帮助吗?

解决方案

绝对不是,第一个是自我执行的匿名函数,第二个是 ready 处理程序。

(function(jQuery){
  //jQuery in this scope is referencing whatever is passed-in
})(jQuery);

所以 jQuery 功能的内部不一定相同 jQuery 在功能外部。但是您通常不想将n匹配的全局变量名与本地变量混合。

以此示例:

(function(obj) {
   alert(obj);
})('Hello');

这定义了一个函数,然后 立即调用它, ,传递“你好”

其他提示

他们不等。

您的第一个示例是 立即启动的功能表达式(IIFE). 。它围绕本地定义的变量创建一个封闭。

您的第二个示例指定一个函数在 DOM已满载. 。它用于确保在执行封闭的代码之前,可以确保DOM中的所有元素节点可用。这也是一个封闭。

两个示例都使用匿名功能。

值得指出的是,使用两个示例是很好的做法,例如:

(function($){
    // locally-scoped, DOM-is-NOT-Ready-code here.
    $(function () {
        // your locally-scoped, DOM-is-ready-code here.
    });
}(jQuery)); // note that I've moved the invocation into the parens
            // that contain the function.  This makes JSLint happy!
$(document).ready(function () {

});

等同于此:

$(function() {

});

第一个片段是立即调用的匿名函数,可创建本地范围:

(function() {
    var x = 2;
})();

alert(x); // undefined

否。第一个并没有真正做太多。只是将内部内部的任何变量与周围范围分开,并创建一个局部 jQuery 内部变量。

第二个通过运行的函数 DOM准备就绪(换句话说 <body> 已加载)。

相当于:

$(document).ready(function () {
});

是:

$(function () {
});

做同样的事情。

同时:

(function(jQuery){
})(jQuery);

通常写为:

(function($){
})(jQuery);

所以这样 $ 变量不再是全局变量。如果全球有用 $ 变量已经在使用中。

一点也不。第一个是闭合 - 您创建的函数,然后立即调用。但是,通常您会将两者结合在一起:


  (function($) {
    // use the $ variable
    $(document).ready(function(){
      // ...
    });
  })(jQuery);

通过创建关闭,您可以将“ jQuery”重命名为“ $”,只是在本地的代码块。使用闭合语法的原因是,即使可能无法将其定义为全局范围中的jQuery对象,也可以使用$变量(即某些JavaScript框架(例如Prototype)使用$作为变量)。

每当您编写jQuery插件时,都应将所有jQuery代码包装在此类封闭中,以免干扰任何其他JavaScript框架。如果您不编写插件,并且不使用任何其他JavaScript框架,则可能不必费心将代码包裹在封闭中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top