纯函数 Vs.非纯函数

纯函数

纯函数对于相同的参数总是返回相同的结果。它不依赖程序执行过程中任何状态和数据的变化。它仅仅依赖于输入的参数。它们没有任何副作用,如网络或数据库调用,也不改变任何传递给它们的变量参数。

例子

function getSquare(x) {
return x * x;
}

非纯函数

任何改变它的参数的内部状态,或者外部变量的值的函数,都是非纯函数。它们可能有副作用,如网络或数据库的调用,并且可能改变传递给它们的变量的值。

例子

function getSquare(items) {
var len = items.length;
for (var i = 0; i < len; i++) {
items[i] = items[i] * items[i];
}
return items;
}

Math.random()是非纯函数;它会改变Math对象的内部状态,这样你才能成功获得不同的值。

原文链接