首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高阶函数返回纯函数

高阶函数返回纯函数
EN

Stack Overflow用户
提问于 2018-08-22 02:19:32
回答 3查看 1.4K关注 0票数 21

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

代码语言:javascript
复制
let functionA = (customValue) => {
  let value = customValue || 1;
  return input => input * value;
};

以下是一些结果:

代码语言:javascript
复制
functionA()(4)             
// => returns 4

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

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

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

functionA返回的函数是否可以视为纯函数?

UPDATE:上面的示例仅使用数字输入。正如@CRice所描述的,只有当customValue是常量且不具有内部状态(如类)时,返回的函数才能被视为纯函数。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-22 02:33:29

使用纯函数的这一定义

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

  1. 它的返回值对于相同的参数是相同的(不随本地静态变量、非局部变量、可变引用参数或I/O设备的输入流而变化)。
  2. 它的评估没有副作用(没有变异的局部静态变量,非局部变量,可变的参考参数或I/O流)。

然后,nofunctionA并不总是返回一个纯函数。

下面是一种使用functionA的方法,这样它就不会返回一个纯函数:

代码语言:javascript
复制
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));

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

票数 23
EN

Stack Overflow用户

发布于 2018-08-22 02:30:35

是的,返回的函数可以认为是纯的。之所以认为它是纯的,是因为给定完全相同的输入,函数总是返回相同的输出。

票数 3
EN

Stack Overflow用户

发布于 2018-08-22 02:38:00

返回的函数可以视为纯函数。在您的示例中,您实际上拥有4个不同的纯函数。

代码语言:javascript
复制
const pureFunc1 = functionA();
pureFunc1(4)   // => returns 4
pureFunc1(4)   // => returns 4

const pureFunc2 = functionA(2);
pureFunc2(4)   // => returns 8
pureFunc2(4)   // => returns 8

// ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51959041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档