Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 高阶函数返回纯函数_Javascript_Higher Order Functions_Pure Function - Fatal编程技术网

Javascript 高阶函数返回纯函数

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

下面是一个名为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 16
function返回的函数可以被认为是纯函数吗


更新:以上示例仅使用数字输入。如@CRice所述,只有当customValue为常量且没有内部状态(如类)时,返回的函数才能被视为纯函数。

是的,返回的函数可以被视为纯函数。将其视为纯函数的原因是,如果输入完全相同,函数将始终返回相同的输出。

使用:

在计算机编程中,纯函数是具有 以下特性:

  • 对于相同的参数,其返回值是相同的(不随参数变化) 局部静态变量、非局部变量、可变引用 来自I/O设备的参数或输入流)

  • 它的评估没有结果 副作用(局部静态变量无突变,非局部 变量、可变引用参数或I/O流)

  • 然后,no
    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只是一种试图实现函数式编程范式的玩具语言。但是,对于字符串这样的基本数据类型,情况可能并非如此。