我刚来 javascript。我遇到过这样的代码。

function makeAdder(a) {
   return function(b) {
       return a + b;
   };
}
x = makeAdder(5);

这里 x(6) 的值是 11。这里的 x 似乎处于“未完成”状态,等待另一个参数完成?
我不知道这是如何工作的。有人可以向我解释一下吗?任何引用将不胜感激。

最佳答案

这是某些函数式编程语言中的常用技术。

这在 Javascript 中很简单,因为函数是一等值,我们可以将它们作为参数提供给其他函数,将它们存储为对象的属性或变量,或者,在这种情况下,从其他函数返回它们。

这称为高阶函数,因为它要么接受函数参数,要么返回函数结果。

Javascript 中的值具有全局或函数作用域。参数 a 在外部函数的范围内可用,并且由于内部函数是在该范围内创建的,因此它可以访问变量 a 。这称为 闭包

许多库提供了一个 curry 函数,它封装了一个简单的函数,例如

function f(a, b) {
  return a + b;
}

改为使用:
var g = curry(function f(a, b) {
  return a + b;
});

所以现在你可以把它称为
g(6, 36); //=> 42

或作为
var add6 = g(6);
add6(10);  //=> 16;

但是如果你总是想分两步完成,你可以像你的 makeAdder 那样定义它。

如果您对这种编程风格感兴趣,有许多库可以帮助您解决这个问题。我个人最喜欢的是 Ramda(免责声明:我是 Ramda 的核心贡献者。)

关于Javascript,调用嵌套函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35387992/

10-12 07:28
查看更多