Javascript 高阶函数返回纯函数
下面是一个名为functionA的高阶函数的示例,该函数以customValue作为输入,并返回一个函数,该函数获取输入并使用自定义值详细说明结果:Javascript 高阶函数返回纯函数,javascript,higher-order-functions,pure-function,Javascript,Higher Order Functions,Pure Function,下面是一个名为functionA的高阶函数的示例,该函数以customValue作为输入,并返回一个函数,该函数获取输入并使用自定义值详细说明结果: let functionA = (customValue) => { let value = customValue || 1; return input => input * value; }; 以下是一些结果: functionA()(4) // => returns 4 function
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
function返回的函数可以被认为是纯函数吗
更新:以上示例仅使用数字输入。如@CRice所述,只有当customValue为常量且没有内部状态(如类)时,返回的函数才能被视为纯函数。是的,返回的函数可以被视为纯函数。将其视为纯函数的原因是,如果输入完全相同,函数将始终返回相同的输出。使用: 在计算机编程中,纯函数是具有 以下特性:
function
并不总是返回纯函数
下面是一种使用function
的方法,这样它就不会返回纯函数:
let functo=(customValue)=>{
设值=自定义值| | 1;
返回输入=>输入*值;
};
类突变子{
构造函数(){
这个。i=0;
}
价值(){
返回这个.i++;
}
}
const nonPureFunction=function(新的突变子());
//为相同的输入生成不同的结果,例如:不纯净。
console.log(非pureFunction(10));
console.log(非pureFunction(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
// ...
关于“纯”对功能的含义,社区中进行了健康、有意义的讨论。一个(超过?-)的简化定义是“无副作用”——对函数范围外的变量/状态没有影响,这将使函数对相同的输入产生不同的影响。你的工作人员绝对符合这个标准。我说是的。如果你只考虑合理的输入,即代码>数字< /代码>(或BigTin,现在)——看看CRice的答案——那么,是的,它是纯粹的。一些善良的人支持我的评论,但很明显我误解了这个问题。你没有问“functionA纯吗?”,而是问“functionA返回的函数总是纯的吗,凭借functionA?”正如下面其他人回答的那样,我认为第二个问题的答案是“否”。JS中的难题很难解决。(与C++相同)对于OP:不要将答案编辑到问题中。如果你想回答一个问题,那么我们可以说只要customValue没有内部状态,那么function返回的函数就是纯函数。对吗?我会说是的,只要customValue
是常量。但是您也可以将mutator
作为参数传递给相同类型的恶作剧的返回函数。但这仍然算是“相同的投入”吗?我不知道。@pnknrg从流中读取数据会被视为“内部状态”吗?我认为,如果customValue
是纯函数,function
就是纯函数,只要你有像JS中Object这样的可变数据类型,你就不会有纯函数。JS只是一种试图实现函数式编程范式的玩具语言。但是,对于字符串这样的基本数据类型,情况可能并非如此。