下面是一个名为functionA的高阶函数的示例,该函数以customValue作为输入,并返回一个函数,该函数获取输入并使用自定义值详细说明结果:
let functionA = (customValue) => {
let value = customValue || 1;
return input => input * value;
};以下是一些结果:
functionA()(4)
// => returns 4
functionA(2)(4)
// => returns 8
functionA(3)(4)
// => returns 12
functionA(4)(4)
// => returns 16functionA返回的函数是否可以视为纯函数?
UPDATE:上面的示例仅使用数字输入。正如@CRice所描述的,只有当customValue是常量且不具有内部状态(如类)时,返回的函数才能被视为纯函数。
发布于 2018-08-22 02:33:29
使用纯函数的这一定义
在计算机编程中,纯函数是具有下列属性的函数:
然后,no,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));
如您所见,当给定相同的输入(10)时,返回的函数会产生不同的结果。这违反了上述定义中的第一个条件(使用同样的技巧,也可能违反第二个条件)。
发布于 2018-08-22 02:30:35
是的,返回的函数可以认为是纯的。之所以认为它是纯的,是因为给定完全相同的输入,函数总是返回相同的输出。
发布于 2018-08-22 02:38:00
返回的函数可以视为纯函数。在您的示例中,您实际上拥有4个不同的纯函数。
const pureFunc1 = functionA();
pureFunc1(4) // => returns 4
pureFunc1(4) // => returns 4
const pureFunc2 = functionA(2);
pureFunc2(4) // => returns 8
pureFunc2(4) // => returns 8
// ...https://stackoverflow.com/questions/51959041
复制相似问题