如何在currying函数中访问上一个函数的结果?

时间:2019-05-06 10:14:15

标签: javascript currying arrow-functions

我必须编写一个包含函数的currying函数,执行另一个函数,然后通过将最后一个参数作为要计算的值来执行第二个函数。

我正在努力解决的问题:如何同时访问第一个函数和最后一个值?

到目前为止,我可以通过使用函数语法编写一个函数并访问this来访问第一个函数。

Function.prototype.foo = function(x) {
  // can't make currying functions by using functions keyword
  console.log(this, x);
};

(() => 10).foo(1);

当我编写一个currying函数时,我可以访问第二个(x)和第三个(y)函数。

Function.prototype.bar = x => y => {
  // but also can't access this like in function syntax
  console.log(x, y);
}

// how would I access 10 in bar?
(() => 10).bar(1)(2);

最终功能看起来像这样:

someFunc.then(someSecondFunc).then(someThirdFunc)(100)

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

不确定是否可以解决您的问题,但是可以使用function关键字创建currying函数:

Function.prototype.bar = function(x) {
    return function(y) {
        console.log(x, y)
    }
}

我实际上无法验证是否可行:

(function() {return 10}).bar(1)(2)

在任何情况下,ˋthisˋ都是函数,而不是返回值(10),因为未调用该函数。

答案 1 :(得分:0)

通过使用currying函数和function关键字,我的答案看起来像这样:

Function.prototype.then = function(secondFct) {
  const firstFct = this;
  return function(value) {
    return firstFct(secondFct(value));
  }
}

非常感谢buboh的帮助。