我假设纯函数必须始终具有返回类型(即不得为void)并且无论对象的状态如何都必须具有相同的输出,并且不纯函数会更改对象的状态或打印对象的状态。

但是我使用的教科书指出:



我糊涂了。哪一个是正确的?

编辑

澄清一下,让我问的是这个问题:

最后一个问题是“给出所使用的功能的类型”,在此发表评论的人指出,它在打印时是不纯净的功能。

那么此功能是纯净的还是不纯净的?

最佳答案

内容取自this link

纯函数的特征:

  • 纯函数的返回值仅取决于其参数
    因此,如果您使用相同的参数集调用纯函数,则将始终获得相同的返回值。
  • 它们没有网络或数据库调用之类的副作用
  • 他们不修改传递给他们的参数

  • 不纯函数的特征
  • 不纯函数的返回值不仅仅取决于其参数
    因此,如果使用相同的参数集调用不纯函数,则可能会获得不同的返回值
    例如,Math.random(),Date.now()
  • 它们可能有任何副作用,例如网络或数据库调用
  • 他们可以修改传递给他们的参数


  • function impureFunc(value){
      return Math.random() * value;
    }
    
    function pureFunc(value){
      return value * value;
    }
    
    var impureOutput = [];
    for(var i = 0; i < 5; i++){
       impureOutput.push(impureFunc(5));
    }
    
    var pureOutput = [];
    for(var i = 0; i < 5; i++){
       pureOutput.push(pureFunc(5));
    }
    
    console.log("Impure result: " + impureOutput); // result is inconsistent however input is same.
    
    console.log("Pure result: " + pureOutput); // result is consistent with same input

    关于java - 纯函数和纯函数之间的区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22395311/

    10-14 10:16