gpt4 book ai didi

javascript - 嵌套的纯函数还是纯函数吗?

转载 作者:数据小太阳 更新时间:2023-10-29 05:05:17 25 4
gpt4 key购买 nike

根据定义,如果满足以下条件,纯函数就是纯函数:

  • 给定相同的输入,将始终返回相同的输出。
  • 没有副作用。
  • 不依赖于外部状态。

所以这是一个纯函数:

function foo(x) {
return x * 2;
}

foo(1) // 2
foo(2) // 4
foo(3) // 6

这也是一个纯函数(在 JavaScript 上下文中)

Math.floor(x);

Math.floor(1.1); // 1
Math.floor(1.2); // 1
Math.floor(2.2); // 2

问题:如果我们将这 2 个纯函数结合起来,它是否仍被视为纯函数?

// Nested with Math library
function bar(x) {
return Math.floor(x);
}

// Nested even deeper
function foobar(x) {
return foo(Math.floor(x));
}

显然,在没有副作用的情况下,它仍然总是在给定相同输入的情况下返回相同的输出,但是从其他上下文(作用域)调用函数是否违反了“不依赖外部状态”的法律?

最佳答案

外部状态不同于外部代码。如果纯函数不能使用外部代码,那么几乎就没有纯函数这样的东西了。即使您所有的函数都是 x * 2,在(许多)纯函数式语言中,甚至 * 也是一个函数。所以即使是这个简单的函数也无法避免调用其他函数。

函数定义或多或少只是语法细节。您可以将外部函数的函数体内联到更长的表达式中。例如:

function foo(a, b) {
return bar(a) + bar(b);
}

function bar(x) {
return x * 2;
}

等同于:

function foo(a, b) {
return a * 2 + b * 2;
}

唯一的区别是代码片段的可重用性和/或可读性和可维护性。不是纯度。

如果函数不引起副作用或不受其自身之外的副作用/状态的影响,则该函数是纯函数。只要它调用的所有代码也符合该规则,它就会保持纯净。

关于javascript - 嵌套的纯函数还是纯函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40280977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com