这个未知的JavaScript语法是什么?
这是jQuery代码吗这个未知的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-
(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);