高阶函数返回纯函数

Fra*_*eli 19 javascript higher-order-functions pure-function

下面是一个名为functionA的高阶函数示例,它将customValue作为输入,并返回一个获取输入并使用自定义值来详细说明结果的函数:

let functionA = (customValue) => {
  let value = customValue || 1;
  return input => input * value;
};
Run Code Online (Sandbox Code Playgroud)

这是一些结果:

functionA()(4)             
// => returns 4

functionA(2)(4)
// => returns 8

functionA(3)(4)
// => returns 12

functionA(4)(4)
// => returns 16
Run Code Online (Sandbox Code Playgroud)

功能A返回的功能可以被认为是纯粹的吗?

更新:以上示例仅使用数字输入.正如@CRice所描述的那样,只有当customValue是常量且没有内部状态(如类)时,返回的函数才能被认为是纯函数.

CRi*_*ice 23

使用Pure Function的这个定义:

在计算机编程中,纯函数是具有以下属性的函数:

  1. 它的返回值对于相同的参数是相同的(本地静态变量,非局部变量,可变引用参数或来自I/O设备的输入流没有变化).

  2. 它的评估没有副作用(没有局部静态变量,非局部变量,可变参考参数或I/O流的变异).

然后,,functionA不会总是返回纯函数.

这是一种使用方法,functionA以便它不返回纯函数:

let functionA = (customValue) => {
  let value = customValue || 1;
  return input => input * value;
};

class Mutater {
  constructor() {
    this.i = 0;
  }
  valueOf() {
    return this.i++;
  }
}

const nonPureFunction = functionA(new Mutater());

// Produces different results for same input, eg: not pure.
console.log(nonPureFunction(10));
console.log(nonPureFunction(10));
Run Code Online (Sandbox Code Playgroud)

如您所见,返回的函数在给定相同的input(10)时会产生不同的结果.这违反了上述定义中的第一个条件(使用相同的技巧,你也可能违反第二个条件).

  • 所以我们可以说只要customValue没有内部状态,那么functionA返回的函数就是纯函数.正确? (8认同)