Javascript 定义函数的不同形式

Javascript 定义函数的不同形式,javascript,jquery,Javascript,Jquery,以下形式的函数定义有什么区别: $.myFunction = function() { //function body }; var myFunction = function() { //function body }; $(myFunction = function() { //function body }); 第一个是将函数myFunction添加到$中,该函数可以是任何内部使用$的JavaScript库,如jQuery、mooTools、Prototype

以下形式的函数定义有什么区别:

$.myFunction = function() {
    //function body
};

var myFunction = function() {
    //function body
};

$(myFunction = function() {
    //function body
});

第一个是将函数
myFunction
添加到
$
中,该函数可以是任何内部使用
$
的JavaScript库,如jQuery、mooTools、Prototype

在第一个函数中,您只需将自己的函数添加到由
$
指定的javascript库中


第二种是函数表达式,与函数声明相反,后者具有以下形式:

function myFunction() {
  //function body
}

第三个看起来很奇怪,但它也是在JavaScript库的上下文中使用的函数表达式,因为
$
,所以不管该库是什么意思


要了解函数表达式和函数声明之间的区别,请查看这篇精彩文章:

要记住函数表达式和函数声明之间最重要的区别是,函数声明无论在何处都是可用的(因为它们被提升到顶部),而函数表达式只能在之前或之后的代码中定义时运行。例如:

foo1(); // alerts "I am function declaration"
foo2(); // error, undefined function

function foo1() {
 alert('I am function declaration');
}

var foo2 = function() {
  alert('I am function expression');
};

foo1(); // alerts "I am function declaration"
foo2(); // alerts "I am function expression"

仅供参考,还有自调用匿名函数和自inovking命名函数:

// self invoking anonymous function
(function(){
  // code
})();

// self invoking named function
(function foo(){
  // code
})();
以及使用以下字符转换为函数表达式的函数声明:

! function(){
  // code
})();

+ function foo(){
  // code
})();

请注意,自调用函数一经解析就会运行,因为它们的签名末尾有
()

实际上只有一个函数定义,我称之为第二个函数定义。第一个是用该函数扩展全局jQuery对象(或使用美元符号的任何其他库),第三个很奇怪。

假设“$”代表jQuery(在这里似乎很明显),第三个语法定义一个匿名函数并将其作为参数传递给jQuery,这是注册jQuery.DocumentReady回调的快捷方式

$.myFunction = function() {
    //function body
};
这将创建一个函数作为
$
对象的属性。如果您使用的是jQuery,那么
$
是全局
jQuery
对象。您可以使用
$.myFunction()


这将创建一个分配给名为
myFunction
的变量的函数。如果在另一个函数中执行此操作,则
myFunction
将仅在该范围内可用


这一个正在做两件事,让我们将其分解为两个步骤,以使其更清楚:

myFunction = function() {    // step 1
    //function body
};
$(myFunction);               // step 2
  • 第一步是创建一个分配给名为
    myFunction
    的全局变量的函数。该变量是全局变量,因为您没有使用
    var
    关键字。一般来说,您可能不想使用全局变量,当其定义不是很明显时,当然也不想使用
  • 第二步是(假设您正在使用jQuery)将
    myFunction
    传递给jQuery,以便在DOM完成加载后执行。有关更多信息,请参阅

    更常见的做法是将函数传递给jQuery,而不将其分配给任何变量,即

    $(function() {
        //function body
    });
    

  • 您好,可能是重复的,它与您引用的问题不重复。
    $
    用于许多框架,而不仅仅是jQuery。第三个和第一个定义应该是等价的,将
    myFunction
    添加到
    $
    对象/“namespace”是的,我指的是jQuery或任何其他库。第三个可以,但是这个声明有什么用呢?似乎没有必要第一个的用法是什么?为什么有人要向$添加函数?在本例中,第一个函数的用法是扩展另一个对象。以这个例子
    varo={};o、 foo='bar'
    第一个的用法是什么?为什么有人想向$添加函数?@baltusaj:假设
    $
    是用于jQuery的,并且要向jQuery对象添加自己的函数,请使用第一种方法。
    myFunction = function() {    // step 1
        //function body
    };
    $(myFunction);               // step 2
    
    $(function() {
        //function body
    });