在JavaScript中声明一个没有名称的函数

时间:2019-06-05 12:47:14

标签: javascript function object

我不熟悉JavaScript(来自Java),并且想了解此功能

(function (global, factory) {
if (typeof define === 'function' && define.amd) {
    define(['../numeral'], factory);
} else if (typeof module === 'object' && module.exports) {
    factory(require('../numeral'));
} else {
    factory(global.numeral);
}

}

它来自这个github页面https://github.com/adamwdraper/Numeral-js/blob/master/src/formats/currency.js

我的问题是:为什么没有以globalfactory作为参数的函数的名称?

我期望的是这样的:

function myFunction(p1, p2) {
return p1 * p2;   // The function returns the product of p1 and p2
}

在这里,我们有一个名称myFunction,但是在上面的示例中,我们没有该函数的名称。为什么?为什么在JavaScript中允许这样做?

3 个答案:

答案 0 :(得分:2)

是的。它们在Javascript中称为匿名函数。

通常,这些函数作为对另一个函数的回调提供。

或者可以像杰克在回答中所说的那样立即调用它们。

答案 1 :(得分:1)

这是因为它位于IIFE中-您无需命名函数,而命名的唯一实际用途就是递归。

是这样的:

var func = function (global, factory) {
    if (typeof define === 'function' && define.amd) {
        define(['../numeral'], factory);
    } else if (typeof module === 'object' && module.exports) {
        factory(require('../numeral'));
    } else {
        factory(global.numeral);
    }
}

您这样称呼它:

(func)();

或者:

func();

这是一个函数表达式-它没有名称,而是分配给一个命名变量。未命名函数称为匿名函数,您可以将它们用作测试/回调函数。

答案 2 :(得分:1)

匿名函数就是这样,没有名称的函数。不能像通常使用函数那样通过名称来调用它们。实际上,我们在javascript中经常使用它们。

它的常见用法是将另一个函数作为参数的函数,例如.sort()。排序使您可以传递自定义函数来处理排序逻辑,因此使用匿名函数,它会像这样:

var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
  return a - b;
});
//[1, 2, 3, 4, 5]

查看如何将函数作为唯一要排序的参数传递。与此等效的内容也可能像这样:

var numbers = [4, 2, 5, 1, 3];
var mySortFunction = function(a, b){
   return a - b;
}
numbers.sort(mySortFunction);
//[1, 2, 3, 4, 5]

匿名函数只是一种干净快捷的方法,可以创建您不会在代码中重复使用的函数。