这是jQuery代码相当于这是什么未知的JavaScript语法?
$(document).ready(function() {
});
如果是
(function(jQuery){
})(jQuery);
,什么是两者之间的区别是什么?如果不是,第一个做什么?
编辑:
谢谢大家。大多数响应类似于不同的风味和样本
这是jQuery代码相当于这是什么未知的JavaScript语法?
$(document).ready(function() {
});
如果是
(function(jQuery){
})(jQuery);
,什么是两者之间的区别是什么?如果不是,第一个做什么?
编辑:
谢谢大家。大多数响应类似于不同的风味和样本
绝对不是,第一个是自动执行的匿名函数,第二个是ready
处理程序。
(function(jQuery){
//jQuery in this scope is referencing whatever is passed-in
})(jQuery);
因此,函数内的jQuery
不一定是功能之外的相同jQuery
。但是,您通常不希望将全局变量名与本地变量名进行混合匹配。
拿这个例子:
(function(obj) {
alert(obj);
})('Hello');
定义一个函数,然后立即调用它,在 “你好”
路过他们是不等价的。
你的第一个例子是Immediately-Invoked Function Expression (IIFE)。它围绕本地定义的变量创建一个闭包。
第二个示例指定了DOM is fully loaded时执行的功能。它用于在执行封装代码之前确保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(function($){});' – 2010-12-17 00:20:18
@ŠimeVidas更新了我的示例,使其更清楚为什么我会这样做。 – Stephen 2010-12-17 00:24:13
号第一个是不是真的这样做了。只需从周围范围内分离任何变量,并在里面创建一个本地jQuery
变量。
第二个在 DOM准备好之后(换句话说,在<body>
已加载之后)通过运行的函数。
一种常见的等价于:
$(document).ready(function() {
});
是:
$(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的”到“$”只为本地代码块。你使用闭包语法的原因是你可以使用$变量,尽管它可能没有被定义为全局范围内的jQuery对象(即一些JavaScript框架如原型使用$作为变量)。
每当你编写一个jQuery插件时,你应该在这种封闭中包含所有的jQuery代码,所以它不会干扰任何其他的JavaScript框架。如果你没有编写插件,也没有使用任何其他的JavaScript框架,那么你可能不必费心把你的代码放在闭包中。
你的代码可以简化为:'jQuery(function($){});' – 2010-12-17 00:16:54
另外,这不是闭包。它只是将一个参数传递给一个函数。 – 2010-12-17 00:17:48
@ŠimeVidas:我不同意,任何时候你有一个内在的功能,你有一个闭包。如果代码中“// ...”是创建一个使用$符号的处理程序,那么他将通过闭包使用$可用。即使它没有被使用,也并不意味着它不是封闭的 – 2010-12-17 00:53:45
这不是jQuery代码,它是JavaScript代码。 :) – epascarello 2010-12-16 23:57:09