高阶函数returns 纯函数
Higher order function returns pure function
这是一个名为 functionA 的高阶函数示例,它以自定义值作为输入,returns 一个函数获取输入并使用自定义值来详细说明结果:
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 16
functionA返回的函数可以算纯函数吗?
UPDATE: 上面的例子只使用数字输入。正如@CRice 所述,仅当 customValue 为常量且没有内部状态(如 类)时,返回的函数才可被视为纯函数。
是的,returned 的函数可以被认为是纯函数。它被认为是纯函数的原因是,在给定完全相同的输入的情况下,函数总是 return 相同的输出。
使用this definition of Pure Function:
In computer programming, a pure function is a function that has the
following properties:
Its return value is the same for the same arguments (no variation with
local static variables, non-local variables, mutable reference
arguments or input streams from I/O devices).
Its evaluation has no
side effects (no mutation of local static variables, non-local
variables, mutable reference arguments or I/O streams).
那么,没有,functionA
不会总是return一个纯函数。
这里有一种使用 functionA
的方法,这样它就不会 return 一个纯函数:
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));
如您所见,returned 函数在给定相同输入 (10
) 时会产生不同的结果。这违反了上述定义中的第一个条件(并且使用相同的技巧您也可能违反第二个条件)。
你的返回函数可以被认为是纯函数。在您的示例中,您实际上有 4 个不同的纯函数。
const pureFunc1 = functionA();
pureFunc1(4) // => returns 4
pureFunc1(4) // => returns 4
const pureFunc2 = functionA(2);
pureFunc2(4) // => returns 8
pureFunc2(4) // => returns 8
// ...
这是一个名为 functionA 的高阶函数示例,它以自定义值作为输入,returns 一个函数获取输入并使用自定义值来详细说明结果:
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 16
functionA返回的函数可以算纯函数吗?
UPDATE: 上面的例子只使用数字输入。正如@CRice 所述,仅当 customValue 为常量且没有内部状态(如 类)时,返回的函数才可被视为纯函数。
是的,returned 的函数可以被认为是纯函数。它被认为是纯函数的原因是,在给定完全相同的输入的情况下,函数总是 return 相同的输出。
使用this definition of Pure Function:
In computer programming, a pure function is a function that has the following properties:
Its return value is the same for the same arguments (no variation with local static variables, non-local variables, mutable reference arguments or input streams from I/O devices).
Its evaluation has no side effects (no mutation of local static variables, non-local variables, mutable reference arguments or I/O streams).
那么,没有,functionA
不会总是return一个纯函数。
这里有一种使用 functionA
的方法,这样它就不会 return 一个纯函数:
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));
如您所见,returned 函数在给定相同输入 (10
) 时会产生不同的结果。这违反了上述定义中的第一个条件(并且使用相同的技巧您也可能违反第二个条件)。
你的返回函数可以被认为是纯函数。在您的示例中,您实际上有 4 个不同的纯函数。
const pureFunc1 = functionA();
pureFunc1(4) // => returns 4
pureFunc1(4) // => returns 4
const pureFunc2 = functionA(2);
pureFunc2(4) // => returns 8
pureFunc2(4) // => returns 8
// ...