以下如何成为纯函数?
How is the following a pure function?
它声明 here 以下是一个纯函数:
function insert(DB, user) {
return function() {
throwIfUserExists(DB, user);
var savedUser = saveUser(DB, user);
return savedUser;
}
}
并且以下是一个不纯的函数:
function insert(user) {
if (DB.exists(user.id)) {
throw Error("users exists");
}
var id = DB.insert(user);
user.id = id;
return user;
}
我不明白第一个函数为何是纯函数,因为它 returns 是一个会产生副作用的函数。我是不是错了,如果不是,函数怎么写成纯函数?
纯函数是这样的函数:
- 给定相同的输入,将始终return相同的输出。
- 没有副作用。
现在注意第一点。
在您的第一个示例中,只要您继续发送相同的 DB
和 user
,输出就会相同。 savedUser
或 throwIfUserExists
函数的构造会影响第一个 insert
fn 的输出,但插入函数本质上是一个纯函数。
然而,在第二个函数中,即使 user
相同,每次调用的输出也会不同。准确地说,行 user.id = id;
是产生 "side effects".
的行
阅读 Eric Elliot 关于纯函数的文章:https://medium.com/javascript-scene/master-the-javascript-interview-what-is-a-pure-function-d1c076bec976
它声明 here 以下是一个纯函数:
function insert(DB, user) {
return function() {
throwIfUserExists(DB, user);
var savedUser = saveUser(DB, user);
return savedUser;
}
}
并且以下是一个不纯的函数:
function insert(user) {
if (DB.exists(user.id)) {
throw Error("users exists");
}
var id = DB.insert(user);
user.id = id;
return user;
}
我不明白第一个函数为何是纯函数,因为它 returns 是一个会产生副作用的函数。我是不是错了,如果不是,函数怎么写成纯函数?
纯函数是这样的函数:
- 给定相同的输入,将始终return相同的输出。
- 没有副作用。
现在注意第一点。
在您的第一个示例中,只要您继续发送相同的 DB
和 user
,输出就会相同。 savedUser
或 throwIfUserExists
函数的构造会影响第一个 insert
fn 的输出,但插入函数本质上是一个纯函数。
然而,在第二个函数中,即使 user
相同,每次调用的输出也会不同。准确地说,行 user.id = id;
是产生 "side effects".
阅读 Eric Elliot 关于纯函数的文章:https://medium.com/javascript-scene/master-the-javascript-interview-what-is-a-pure-function-d1c076bec976