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
在计算机编程中,纯函数是具有以下属性的函数:
它的返回值对于相同的参数是相同的(本地静态变量,非局部变量,可变引用参数或来自I/O设备的输入流没有变化).
它的评估没有副作用(没有局部静态变量,非局部变量,可变参考参数或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)时会产生不同的结果.这违反了上述定义中的第一个条件(使用相同的技巧,你也可能违反第二个条件).
| 归档时间: |
|
| 查看次数: |
973 次 |
| 最近记录: |