javascript / jQuery中函数定义的差异

时间:2012-05-23 15:01:11

标签: javascript jquery

版本1:

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

版本2:

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

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

6 个答案:

答案 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(){...的范围内,因此无法从括号外的代码访问。