Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个未知的JavaScript语法是什么?_Javascript_Jquery_Anonymous Function_Iife - Fatal编程技术网

这个未知的JavaScript语法是什么?

这个未知的JavaScript语法是什么?,javascript,jquery,anonymous-function,iife,Javascript,Jquery,Anonymous Function,Iife,这是jQuery代码吗 (function(jQuery){ })(jQuery); 相当于 $(document).ready(function () { }); 如果是,两者的区别是什么?如果没有,第一个做什么 编辑: 谢谢大家。大多数响应都是相似的,有不同的风格,示例绝对不是,第一个是自动执行的匿名函数,第二个是ready处理程序 (function(jQuery){ //jQuery in this scope is referencing whatever is passed-

这是jQuery代码吗

(function(jQuery){
})(jQuery);
相当于

$(document).ready(function () {
});
如果是,两者的区别是什么?如果没有,第一个做什么

编辑:


谢谢大家。大多数响应都是相似的,有不同的风格,示例绝对不是,第一个是自动执行的匿名函数,第二个是
ready
处理程序

(function(jQuery){
  //jQuery in this scope is referencing whatever is passed-in
})(jQuery);
因此,函数内部的
jQuery
不一定与函数外部的
jQuery
相同。但您通常不希望将全局变量名与本地变量名混用

举个例子:

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

这定义了一个函数,然后立即调用它,传入“Hello”

它们是不等价的

您的第一个示例是。它围绕本地定义的变量创建一个闭包

您的第二个示例指定了一个函数,当。它用于确保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!

不,第一个没什么用。只需将内部的任何变量与周围的范围分开,并在内部创建一个本地
jQuery
变量

第二个函数传递一个在DOM就绪后运行的函数(换句话说,在加载
之后)

一种常见的等同于:

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

它做同样的事情

而这:

(function(jQuery){
})(jQuery);
通常写为:

(function($){
})(jQuery);
因此,
$
变量不再是全局变量。如果全局
$
变量已在使用中,则此选项非常有用

$(document).ready(function () {

});
相当于:

$(function() {

});
第一个代码段是一个立即调用的匿名函数,它创建了一个本地作用域:

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

alert(x); // undefined

一点也不。第一个是闭包——一个创建然后立即调用的函数。但是,通常情况下,您会将这两者结合起来,如下所示:


  (function($) {
    // use the $ variable
    $(document).ready(function(){
      // ...
    });
  })(jQuery);
通过创建闭包,您正在将该代码块的“jQuery”重命名为“$”。使用闭包语法的原因是,您可以使用$variable,即使它可能没有在全局范围内定义为jQuery对象(即,一些JavaScript框架(如prototype)使用$variable)


无论何时编写jQuery插件,都应该将所有jQuery代码封装在这种闭包中,这样它就不会干扰任何其他JavaScript框架。如果您不编写插件,也不使用任何其他JavaScript框架,您可能不必费心将代码封装在闭包中。

这不是jQuery代码,而是JavaScript代码。:)您的代码可以简化为:
jQuery(函数($){})同样,这不是一个闭包。它只是把一个参数传递给一个函数。@Šime Vidas:我不同意,只要你有一个内部函数,你就有一个闭包。如果“/…”所在的代码创建了一个使用$符号的处理程序,那么他将通过闭包使用可用的$。即使它没有被使用,也不意味着它不是一个closure@Juan是的,你说得对。它甚至不必是ready处理程序内部的处理程序,因为ready处理程序本身(是一个内部函数,并且)在创建闭包的外部函数调用中生存
@Šime Vidas更新了我的示例,以便更清楚地说明我为什么要这样做。

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