我假设纯函数必须始终具有返回类型(即,不能是void
)并且无论对象的状态如何都必须具有相同的输出,并且 Impure 函数会更改对象的状态或打印对象的状态。
但我使用的教科书上说:
访问器通常包含 return 语句,但打印有关对象状态的信息的方法也可以归类为访问器。
我很困惑。哪一个是正确的?
EDIT
A bit of clarification,The thing that makes me ask is this question:
最后一个问题是“给出所使用函数的类型”,在那里发表评论的人表示,这是一个不纯粹的功能,因为它正在打印。
那么这个函数是纯函数还是非纯函数呢?
内容取自这个链接 http://javascript.tutorialhorizon.com/2016/04/24/pure-vs-impure-functions/
纯函数的特点:
纯函数的返回值仅取决于其参数
因此,如果您使用相同的参数集调用纯函数,您将始终获得相同的返回值。
它们没有任何副作用,例如网络或数据库调用
- 他们不会修改传递给他们的参数
非纯函数的特征
不纯函数的返回值不仅仅取决于它的参数
因此,如果您使用相同的参数集调用不纯的函数,您可能会得到不同的返回值
例如,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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)