版本1:
function add(){
var a = 2;
...
...
...
}
版本2:
$(function(){
var ...
..
..
});
两个版本的主要区别在哪里?对于版本2,它没有函数名称。如果只是简单地运行函数中的代码,为什么不删除$function(){..};
。这真让我感到困惑,因为现在很多脚本都是以版本2的风格编写的。请帮助澄清我的困惑。
答案 0 :(得分:9)
示例1定义了一个名为add
的函数,而示例2只是将一个匿名函数传递给jQuery函数。
$(function() {...});
语法是$(document).ready(function() {...});
的简写,它以函数作为参数,然后在DOM准备好时执行该函数。这用于确保在执行代码之前,您希望在Javascript中使用的元素实际存在。
编辑以解决以下评论:
.click()
jQuery函数有两个用途。如果传递一个函数,那么它会创建一个额外的单击事件处理程序,它将在触发事件时运行该函数。如果未传递函数,则它将触发已附加到jQuery对象中的元素的所有单击事件处理程序。所以,是的,你可以在没有函数的情况下调用.click()
,但它不会做同样的事情。
您无法执行以下操作:
$(document).ready(var foo = 2;...);
因为这会给你一个语法错误。但是,您可以通常的方式定义一个函数,然后将 传递给$(document).ready()
的调用:
function foo() {
var foo = 2;
...
}
$(document).ready(foo);
答案 1 :(得分:3)
示例1和2完全不同。 jQuery是javascript,所以函数定义是一样的。
$(function(){...
只是$(document).ready(function(){...
的简写,而示例1实际上是生成一个名为add
的新函数。
您可以在ready
函数中生成添加函数,如下所示:
$(function(){
function add(){
var foo = 1;
}
});
jQuery不是一种具有与javascript不同的定义和语法的新语言,它是一个使用javascript的语法和定义用javascript编写的工具包。
将jQuery本身视为一个大函数,一个定义为$ ...的函数,而不是function add(){}
jquery只是一个名为$ function $(){}
的函数。您还使用与普通javascript函数相同的语法传递jQuery参数。
function add(arg){
//do something with arg
}
add('#elem');
function $(arg){
//do something with arg
}
$('#elem');
你知道吗? jQuery只是一个很复杂的函数,我们可以传递许多类型的参数,并返回许多有用的工具。但语法和定义与传统的javascript没什么不同。
function add(arg){
var added = arg + 12;
return this.alertAdded = function(){
alert(added);
}
}
add(30).alertAdded(); // will alert 42
//vs
$('#elem').fadeOut(); // same syntax but referring to very different functionality.
这里有一个jQueryish语法的例子,是普通的普通旧JS。
答案 2 :(得分:2)
function add(){
var a = 2;
...
...
...
}
是一个简单的js函数。
$(function(){
var ...
..
..
});
是jQuery Document.ready的快捷方式:
$(document).ready () {};
你可能也想问一下:
(function($){
var ...
..
..
})(jQuery);
给出了$
符号的闭包 - 所以你可以使用美元。 (可能已加载其他库)。
答案 3 :(得分:1)
$(function(){})
实际上是将函数包装在$(document).ready()
中;这样,在加载DOM之前代码才会运行。
答案 4 :(得分:1)
我相信$(function()
是jQuery中文档加载的简写。
如果你想制作一个“jQuery函数”,你需要这样做:
jQuery.fn.yourfunctionname = function() {
//code in here
}
简而言之,你的第一个函数实际上定义了一个名为add
的函数,下一个函数就是这个函数的简写:
$(document).ready(function(){
答案 5 :(得分:1)
第一个版本将函数添加到窗口命名空间,而第二个版本的范围仅在$(function(){...
的范围内,因此无法从括号外的代码访问。