javascript - 以下如何成为纯函数?

标签 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;
}

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

最佳答案

纯函数是这样的函数:

  • 给定相同的输入,将始终返回相同的输出。
  • 没有副作用。

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

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

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

关于javascript - 以下如何成为纯函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47245304/

相关文章:

javascript - 一段时间后如何更改组件的类?

javascript - 没有图例的图表图像

algorithm - 增量文档相似度算法

assembly - 这个只有一个操作数的 x86-64 addq 指令是什么意思? (摘自CSAPP书籍第三版)

C float 每次执行都会改变 %d 个值

javascript - 计算到今天的天数 moment.js

javascript - 动态更改 <div> 元素的大小

computer-science - 队列的实际应用是什么?

javascript - 用 jQuery 动画替换 setInterval

computer-science - 什么是规律性?