为什么使用函数返回函数?

时间:2016-05-19 23:44:01

标签: javascript higher-order-functions

我想知道,为什么我有时会看到返回函数的函数?

例如这个问题的答案: AngularJS custom filter function

$scope.criteriaMatch = function( criteria ) {
  return function( item ) {
    return item.name === criteria.name;
  };
};

有一个函数返回另一个返回值的函数是什么意思?

2 个答案:

答案 0 :(得分:1)

在许多情况下,您想要返回某个功能。在这种情况下,它具体涉及角度定义过滤器的方式。外部函数用于处理可能需要注入的任何依赖项或可能需要指定的任何变量。内部函数是应用于集合以返回较小集合的实际过滤器步骤。

答案 1 :(得分:1)

所有函数式语言和JavaScript允许** Higher order functions *,其中函数被视为语言的第一类成员,可以从另一个函数返回或作为参数传递给另一个函数。这允许语言中的大量功能,例如:

  1. 闭包:闭包又是一种不同类型的野兽,并通过回调为异步编程增添了很多力量。您可以在此处详细了解闭包:https://developer.mozilla.org/en/docs/Web/JavaScript/Closures

  2. 抽象:当您返回仅显示某些功能部分的函数时,您始终可以使用局部变量隐藏其中的某些部分。这允许使用像javascript这样的语言进行抽象,其中您没有像其他语言(如Java或C#)那样拥有publicprivate访问说明符

  3. Currying :您可以通过返回应用于所选属性的函数来实现javascript中的currying。例如。定义函数和,以便可以将参数部分应用于它。 sum(3)(4)

    function sum (a) {
      return function (b) {
        return a + b;
      }
    }
    
  4. 工厂模式:您可以使用高阶函数生成函数并将该函数用作工厂

  5. JavaScript语言中还有许多其他功能,因为它们具有返回功能的能力。