首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >通过应用调用函数与从运行函数直接调用

通过应用调用函数与从运行函数直接调用
EN

Stack Overflow用户
提问于 2020-04-25 22:22:05
回答 1查看 44关注 0票数 1

我正在尝试实现当前功能:

代码语言:javascript
运行
AI代码解释
复制
function sum(a, b, c) {
console.log('SUM'+JSON.stringify(arguments))
  return a + b + c;
}

var curry= function (func,...n) {
      return function(...args2) {
         //console.log('arg2s'+args2)
        return func.apply(this,n.concat(args2));


  };

}

curry(sum,1,2)(3) //SUM{"0":1,"1":2,"2":3}, O/P:6

上面给出了正确的输出,但我没有必要使用应用。

因此,如果我将我的函数更改为:

代码语言:javascript
运行
AI代码解释
复制
var curry= function (func,...n) {
      return function(...args2) {
         //console.log('arg2s'+args2)
        return func(n.concat(args2));


  };

}
curry(sum,1,2)(3) //SUM{"0":[1,2,3]}  O/P:"1,2,3undefinedundefined"

我基本上有两个问题:

为什么直接调用func时curry的实现不起作用?为什么输出如此奇怪?

2.如何以如下方式更改函数并返回和:curry(1)(2)(3)/curry(1,2)(3)/curry(1,2)(1,2,3)等。我可以在网上找到一些解决方案,但无法理解。

例:

代码语言:javascript
运行
AI代码解释
复制
function curry(func) {

  return function curriedFunc(...args) {
    if (args.length >= func.length) {
      return func.apply(this, args);
    } else {
      return function(...args1) {
        return curriedFunc.apply(this, args.concat(args1));
      }
    }
  };

}

任何帮助都将不胜感激!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-25 22:29:37

您的func接受三个参数:abc。当你这样做时:

代码语言:javascript
运行
AI代码解释
复制
return func(n.concat(args2));

你要给它传递一个参数,一个数组。相当于:

代码语言:javascript
运行
AI代码解释
复制
const arr = n.concat(args2);
return func(arr);

听起来,您可能希望将参数扩展到func调用中,而不是:

代码语言:javascript
运行
AI代码解释
复制
return func(...n, ...args2)

使用扩展语法,迭代中的每个项都被放入一个参数中。例如,如果n数组有一个项,它被设置为传递给func的第一个参数,如果args2有2个项,第一个被设置为传递的第二个参数,第二个被设置为传递的第三个参数。

代码语言:javascript
运行
AI代码解释
复制
function sum(a, b, c) {
  console.log('SUM' + JSON.stringify(arguments))
  return a + b + c;
}

var curry = function(func, ...n) {
  return function(...args2) {
    return func(...n, ...args2);
  };

}
curry(sum, 1, 2)(3);

如何以如下方式更改函数并返回和: curry(1)(2)(3)/curry(1,2)(3)/curry(1,2,3)等

跟踪在第一次调用函数时创建的闭包中传递的参数总数。在返回的函数中,将所有参数推送到数组中,如果数组的长度为3,则返回和,否则再次返回函数:

代码语言:javascript
运行
AI代码解释
复制
function sum(a, b, c) {
  return a + b + c;
}

var curry = function(func, ...argsSoFar) {
  const neededArgs = func.length;
  const returnedFn = (...args) => {
    argsSoFar.push(...args);
    if (argsSoFar.length === neededArgs) {
      return func(...argsSoFar);
    } else {
      return returnedFn;
    }
  };
  return returnedFn;
}
console.log(
  curry(sum, 1, 2)(3),
  curry(sum)(1, 2)(3),
  curry(sum)(1)(2, 3),
  curry(sum)(1)(2)(3),
);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61436615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档