以下是一个纯函数?

时间:2017-11-12 04:00:29

标签: javascript computer-science

它指出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;
}

我不明白第一个函数是如何纯粹的,因为它返回一个产生副作用的函数。我错了,如果没有,这个函数怎么可能写成纯粹的?

1 个答案:

答案 0 :(得分:3)

纯函数是一个函数:

  • 给定相同的输入,将始终返回相同的输出。
  • 不产生副作用。

现在要注意第一点。 在您的第一个示例中,只要您继续发送相同的DBuser,输出就会相同。 savedUserthrowIfUserExists函数的构造会影响第一个insert fn的输出,但插入函数本质上是一个纯函数。

但是,在第二个函数中,即使user相同,每个调用的输出也会不同。确切地说,行user.id = id;是产生“副作用”的行。

阅读Eric Elliot关于纯函数的文章:https://medium.com/javascript-scene/master-the-javascript-interview-what-is-a-pure-function-d1c076bec976