根据我的理解,在其他函数中使用外部函数(不是回调)是完全可以的:
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();
}
我的理由还可以吗?
答案 0 :(得分:3)
纯函数的定义表明它必须为同一输入返回相同的输出,并且本身必须不会导致任何可观察到的副作用。如果函数受到非局部变量的影响,或者尽管输入相同而返回不同的输出(如基于日期的计算的情况),那么它就是不纯的。
该函数是否调用其他函数无关紧要。函数式编程的全部要点和函数组成程序,因此调用其他函数是例程的一部分。
你的分析是正确的:只要一个函数是纯粹的,它所调用的函数也是纯粹的,它就是纯粹的。但是,一个不纯的函数会使整个调用者链不纯净。