【问题标题】:Declare a function without a name in JavaScript在 JavaScript 中声明一个没有名字的函数
【发布时间】:2019-06-05 12:47:14
【问题描述】:

我是 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 中允许这样做?

【问题讨论】:

标签: javascript function object


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    这是因为它在 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();
    

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

    【讨论】:

    • 我明白了,所以当我想调用该函数时,我该如何调用它呢?假设我们使用的不是您的版本,而是问题中的版本。如何调用具有“无名”的函数(可以这么说)
    • 它已经被称为@Blnpwr - 在您发布的代码调用该函数之后的 (this, ...) 。要命名它,您必须在函数外部声明它并在函数内部分配它,如果您想在其外部使用命名函数。
    • 啊,我明白了。当我有两个这样的功能时会发生什么?所以又多了一个没有名字的函数。我想给他们两个打电话,我需要使用this, this 吗?
    • 另外:因为它是一个IIFE,正如你所说,这个功能是自动触发/启动的,对吗?
    • 是 @Blnpwr - 这意味着立即调用函数表达式。
    【解决方案3】:

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

    它的常见用途是用于将另一个函数作为参数的函数,例如.sort()。 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]
    

    匿名函数只是创建不会在代码中重用的函数的一种简洁快捷的方法。

    【讨论】:

      猜你喜欢
      • 2014-03-19
      • 2018-05-15
      • 1970-01-01
      • 2022-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-11
      相关资源
      最近更新 更多