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关于纯函数的文章:

假设我调用第一个函数。在第一个函数中,您只是返回一个函数,而不是执行它。所以,没有副作用。
产生副作用的函数
-什么副作用?抛出错误/更新数据库