gpt4 book ai didi

javascript - 函数式编程和闭包/偏应用

转载 作者:行者123 更新时间:2023-11-28 14:54:45 25 4
gpt4 key购买 nike

我对函数式编程的本质感到困惑。提到高阶函数是关键概念之一,它支持闭包和部分应用等技术,即捕获状态策略以及要返回的函数。

然而,另一个关键概念是纯函数不可变状态。换句话说,函数不会有副作用或读取外部状态。它们应该始终返回具有相同参数的相同结果。

这似乎与高阶函数的概念相矛盾,其中函数确实可以访问闭包封装的状态。当然,这并不意味着函数必须改变状态,但至少状态会影响它的行为。

换句话说,相同的函数可能在程序的后续执行中返回不同的结果。或者我是否误解了“相同”作为一个概念意味着什么?我想到的是同名同体的函数,无论是否闭包。毕竟,我们谈论的是类似数学的函数,而不是独特实体的方法。我是否应该将高阶函数返回的函数视为不同的函数,而不仅仅是引用函数,而是定义?

最佳答案

在程序的后续执行中可能不会返回不同的结果。

function adder(init) {
return (arg) => init + arg;
}

这会返回一个函数。它每次都会返回一个不同函数,但是使用相同的参数,它返回的函数与之前使用相同参数的函数执行的操作完全相同。这使得它变得纯粹。

const add10 = adder(10);
const add20 = adder(29);

add10add20不同函数。它们运行相同的代码,但在不同的闭包中。它们都是纯粹的,因为它们的返回值仅取决于它们的输入。

变异的闭包通常很容易从代码中看出,但变异的全局变量则更困难。我曾多次遇到 Object 在加载库时发生变异的情况,而且前后结果并不总是相同。函数的纯度依赖于自由变量,而全局变量是自由变量中最容易受到攻击的。

关于javascript - 函数式编程和闭包/偏应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43305348/

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