纯函数可以依赖于外部常量吗?

时间:2017-08-14 10:33:35

标签: javascript functional-programming

我正在阅读的文章将此作为不纯函数的示例(在JavaScript中):

const tipPercentage = 0.15;

const calculateTip = cost => cost * tipPercentage;

这让我感到有点奇怪,因为tipPercentage是一个具有不可变值的常量。纯函数的常见示例允许在这些常量是函数时依赖于不可变常量。

const mul = (x, y) => x * y

const calculateTip = (cost, tipPercentage) => mul(cost, tipPercentage);

在上面的示例中,如果我错了,请更正我,calculateTip通常会被归类为纯函数。

所以,我的问题是:在函数式编程中,如果一个函数依赖于一个带有不可变值的外部定义常量,当该值不是一个函数时,它仍然被认为是纯函数吗?

1 个答案:

答案 0 :(得分:7)

是的,这是一个纯粹的功能。纯函数是referentially transparent,即可以用其结果替换函数调用而不改变程序的行为。

在您的示例中,替换例如, calculateTip (100)程序中的任何位置15的结果都没有任何行为更改,因此功能是纯粹的。