这个功能纯净还是不纯?

Cod*_*101 4 javascript functional-programming

我在udacity论坛上看到这个函数是一个不纯的函数,但我认为它的纯函数.我很迷惑.有人可以解释一下.

const addAndPrint = (a, b) => { 
  const sum = a+b;
  console.log(`The sum is ${sum}`);
  return sum;
};
Run Code Online (Sandbox Code Playgroud)

Nin*_*olz 13

它不是一个纯函数,因为

console.log(`The sum is ${sum}`);
Run Code Online (Sandbox Code Playgroud)

违反第2点:

  1. 对结果的评估不会导致任何语义上可观察到的副作用或输出,例如可变对象的突变或输出到I/O设备


Sur*_*yan 4

对于相同的输入,它总是会给出相同的结果。函数内部没有任何外部引用,因此它仅取决于参数input

在函数内部可以被认为是不纯粹的事情是,(与返回值无关)有人可以更改 的函数consolelog执行另一件事。

例如

const addAndPrint = (a, b) => { 
  const sum = a+b;
  console.log(`The sum is ${sum}`);
  return sum;
};

console.log(addAndPrint(4,5));
const log = console.log;
console.log = (t) => log('Not the same output');
console.log(addAndPrint(4,5));
Run Code Online (Sandbox Code Playgroud)

正如@Nina 回答的那样,它违反了第二点,因此根据纯函数的声明,它不是纯函数。