定义函数的不同形式

Different forms of defining a function

本文关键字:函数 定义      更新时间:2023-09-26

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

$.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"

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

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

并使用这些字符转换为函数表达式的函数声明:

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

请注意,自调用函数在解析后立即运行,因为()在其签名末尾。

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

这将创建一个函数作为$对象的属性。 如果你使用的是jQuery,那么$是全局jQuery对象。 您可以使用$.myFunction()调用此函数


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

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


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

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

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

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

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

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

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