Javascript 下面的函数如何成为纯函数?
它表明以下是一个纯函数:Javascript 下面的函数如何成为纯函数?,javascript,computer-science,Javascript,Computer Science,它表明以下是一个纯函数: function insert(DB, user) { return function() { throwIfUserExists(DB, user); var savedUser = saveUser(DB, user); return savedUser; } } 以下是一个不纯函数: function insert(user) { if (DB.exists(user.id)) {
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;
}
我不明白第一个函数如何是纯函数,因为它返回的函数会产生副作用。我错了吗?如果错了,函数怎么能写成纯函数呢?纯函数是一个函数,它:
- 给定相同的输入,将始终返回相同的输出
- 不会产生副作用
DB
和user
,输出将是相同的。savedUser
或throwIfUserExists
函数的构造将影响第一个insert
fn的输出,但insert函数本质上是一个纯函数
但是,在第二个函数中,每个调用的输出都会不同,即使用户
是相同的。准确地说,行user.id=id代码>是产生“副作用”的代码
阅读Eric Elliot关于纯函数的文章:假设我调用第一个函数。在第一个函数中,您只是返回一个函数,而不是执行它。所以,没有副作用。产生副作用的函数
-什么副作用?抛出错误/更新数据库