什么是JavaScript中不纯函数的示例

use*_*582 14 javascript pure-function

看过很多纯函数以及它们如何没有副作用,什么是不纯函数的例子,它总是被作为不稳定和主要错误来源而被对抗?

mig*_*igg 21

例如,对其自身范围之外的变量有副作用的不纯函数:

var count = 0;

function increaseCount(val) {
    count += val;
}
Run Code Online (Sandbox Code Playgroud)

或者为同一输入返回不同值的函数,因为它计算未作为参数给出的变量:

var count = 0;

function getSomething() {
    return count > 0;
}
Run Code Online (Sandbox Code Playgroud)


abh*_*itk 6

纯函数不依赖于并且不会修改其范围之外的变量状态.

具体地说,这意味着纯函数总是在给定相同参数的情况下返回相同的结果.它的执行不依赖于系统的状态.

var values = { a: 1 };

function impureFunction ( items ) {
  var b = 1;

  items.a = items.a * b + 2;

  return items.a;
}

var c = impureFunction( values );
// Now `values.a` is 3, the impure function modifies it.
Run Code Online (Sandbox Code Playgroud)

在这里,我们修改给定对象的属性.因此,我们修改了超出函数范围的对象:函数是不纯的.

var values = { a: 1 };

function pureFunction ( a ) {
  var b = 1;

  a = a * b + 2;

  return a;
}

var c = pureFunction( values.a );
Run Code Online (Sandbox Code Playgroud)

我们只需修改函数范围内的参数,外面没有任何修改!

var values = { a: 1 };
var b = 1;

function impureFunction ( a ) {
  a = a * b + 2;

  return a;
}

var c = impureFunction( values.a );
// Actually, the value of `c` will depend on the value of `b`.
// In a bigger codebase, you may forget about that, which may 
// surprise you because the result can vary implicitly.
Run Code Online (Sandbox Code Playgroud)

这里,b不在函数范围内.结果将取决于背景:预期的惊喜!

var values = { a: 1 };
var b = 1;

function pureFunction ( a, c ) {
  a = a * c + 2;

  return a;
}

var c = pureFunction( values.a, b );
// Here it's made clear that the value of `c` will depend on
// the value of `b`.
Run Code Online (Sandbox Code Playgroud)

参考:有关详细信息,请单击此处