javascript/jQuery中函数定义的差异

javascript/jQuery中函数定义的差异,javascript,jquery,Javascript,Jquery,第1版: function add(){ var a = 2; ... ... ... } 第2版: $(function(){ var ... .. .. }); 两个版本的主要区别在哪里?对于版本2,它没有函数名。如果它只是在函数中运行代码,为什么不删除$function(){..}。这真的让我很困惑,因为现在很多脚本都是以版本2的风格编写的。请帮我澄清一下我的困惑 示例1定义了一个名为add的函数,而示例2只是将一个匿名函数传递给jQuery函数 $(function(){ var .

第1版:

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

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

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

示例1定义了一个名为
add
的函数,而示例2只是将一个匿名函数传递给jQuery函数

$(function(){
var ...
..
..
});
$(函数(){…})语法是
$(document).ready(function(){…})的缩写,它将函数作为参数,然后在DOM就绪时执行该函数。这用于确保在执行代码之前,您希望在Javascript中使用的元素确实存在

编辑以解决以下评论:

.click()
jQuery函数有两种用途。如果传递一个函数,那么它将创建一个附加的click事件处理程序,该处理程序将在触发事件时运行该函数。如果不传递函数,那么它将触发所有已附加到jQuery对象中元素的click事件处理程序。因此,是的,您可以在没有函数的情况下调用
。click()
,但它做的事情不同

您不能执行以下操作:

$(document).ready(var foo = 2;...);
因为这会给你一个语法错误。但是,您可以用通常的方式定义函数,然后将其传递给调用
$(document).ready()

$(function(){})
实际上是在
$(document.ready()
中包装函数;这样,在加载DOM之前,代码不会运行。

我认为
$(function()
是jQuery中文档加载的简写

如果要创建“jQuery函数”,需要执行以下操作:

jQuery.fn.yourfunctionname = function() {
     //code in here
}
简而言之,您的第一个函数实际上定义了一个名为
add
的函数,下一个函数就是这个函数的缩写:

$(文档).ready(函数(){

是一个简单的js函数

$(function(){
var ...
..
..
});
是jQuery Document.ready的快捷方式:

$(document).ready () {};
您可能还想询问:

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

这在
$
符号上给出了一个闭包-因此您可以使用美元(在其他库可能已加载的地方)。

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

示例1和示例2完全不同。jQuery是javascript,因此函数定义是相同的

$(function(){…
只是
$(document).ready(function(){…
)的简写,而示例一实际上正在生成一个名为
add
的新函数

您可以在
ready
函数中生成如下添加函数:

 $(function(){

       function add(){
            var foo = 1;               
       }

 });
jQuery不是一种定义和语法与javascript不同的全新语言,它是一种使用javascript语法和定义用javascript编写的工具包

将jQuery本身看作一个大函数,一个定义为$…的函数,因此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.

下面是一个JQuerysh语法的例子,它是普通的老JS。

ref:实际上,如果我们替换ready to“click”,为什么我们需要在里面有一个函数?我们可以只运行代码而不使用函数()?
      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.