在JavaScript纯函数中使用外部数据/操作

时间:2015-11-02 07:59:07

标签: javascript functional-programming

根据我的理解,在其他函数中使用外部函数(不是回调)是完全可以的:

function a() {};

function b() {
    a();
};

并且b仍然可以称为纯函数,不是吗?

对于某些全球方法也是如此,例如:

function c() {
    return Math.sqrt(4);
}

C仍然被认为是纯粹的,因为虽然Math.sqrt超出了c的范围,但Math.sqrt是纯方法。

这一切都很好,但是当我使用这样的外部变量时:

window.isPlaying = false;

function d() {
    return window.isPlaying;
}

然后变得不纯洁,对吧?

并且...在新函数中使用不纯函数会使这个新函数也不纯,不是吗?

function e() {
    return new Date().getTime();
 }

我的理由还可以吗?

1 个答案:

答案 0 :(得分:3)

纯函数的定义表明它必须为同一输入返回相同的输出,并且本身必须不会导致任何可观察到的副作用。如果函数受到非局部变量的影响,或者尽管输入相同而返回不同的输出(如基于日期的计算的情况),那么它就是不纯的。

该函数是否调用其他函数无关紧要。函数式编程的全部要点和函数组成程序,因此调用其他函数是例程的一部分。

你的分析是正确的:只要一个函数是纯粹的,它所调用的函数也是纯粹的,它就是纯粹的。但是,一个不纯的函数会使整个调用者链不纯净。