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

sam*_*ces 11 javascript functional-programming

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

const tipPercentage = 0.15;

const calculateTip = cost => cost * tipPercentage;
Run Code Online (Sandbox Code Playgroud)

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

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

const calculateTip = (cost, tipPercentage) => mul(cost, tipPercentage);
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,如果我错了,请纠正我,calculateTip通常将其归类为纯函数.

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

The*_*ght 8

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

在您的示例中,calculateTip (100)在程序中的任何位置替换它的结果总是有效的,其结果是15行为没有任何变化,因此该函数是纯粹的.