2012-05-23 47 views
4

版本1:差异的javascript函数定义/ jQuery的

function add(){ 
var a = 2; 
... 
... 
... 
} 

版本2:

$(function(){ 
var ... 
.. 
.. 
}); 

两个版本的主要区别在哪里?对于版本2,它没有函数名称。如果只是简单地在函数中运行代码,为什么不去除$function(){..};。这真的让我感到困惑,因为现在,许多脚本都是以第2版的风格编写的。请帮助澄清我的困惑。

+0

ref:http://api.jquery.com/jQuery/ – Yoshi

回答

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); 
+0

实际上,如果我们替换准备好“点击”,为什么我们需要内部有一个函数?我们只需简单地运行没有函数的代码()? – red23jordan

+0

@ red23jordan我已经更新了解决该问题的答案。 –

1

$(function(){})实际上是包裹内$(document).ready()的功能;这种方式代码将不会运行,直到加载DOM。

1

我相信$(function()是jQuery文档加载的简写。

如果你想要做一个“jQuery函数”你需要做的是:

jQuery.fn.yourfunctionname = function() { 
    //code in here 
} 

因此,在短期,你的第一个函数实际上定义了一个名为add功能和未来的功能是这个简写:

$(document).ready(function(){

2
function add(){ 
var a = 2; 
... 
... 
... 
} 

是一个简单的js函数。

$(function(){ 
var ... 
.. 
.. 
}); 

是jQuery Document的快捷方式。准备:

$(document).ready() {}; 

您可能还想问一下:

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

,并在这里$标志封闭 - 这样你就可以使用美元。 (其他库可能已被加载)。

1

第一个版本将函数添加到窗口命名空间,而第二个作用域仅在$(function(){...的作用域内,因此不能从括号外的代码访问。

3

实施例1和2完全不同。 jQuery是JavaScript,所以函数定义是相同的。

$(function(){...$(document).ready(function(){...只是简写,而例如一个实际上是产生所谓的add新功能。

您可以在ready函数中产生的附加功能是这样的:

$(function(){ 

     function add(){ 
      var foo = 1;    
     } 

}); 

jQuery是不是有不同的定义和语法不是JavaScript一个seporate新的语言,它用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. 

这里是一个jQuery语法的例子,是普通的普通老JS。