【问题标题】:Trouble with method that takes in a function and its arguments接受函数及其参数的方法有问题
【发布时间】:2016-12-04 08:36:22
【问题描述】:

我在传递 kata 时遇到问题。我相信我在正确的轨道上,但不完全了解如何检索所需的结果。

说明

编写一个方法,该方法接受一个函数和该函数的参数并返回另一个函数,该函数在调用时返回使用提供的参数调用的原始函数的结果。

给出的示例

给定一个函数添加

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

可以让它变得懒惰:

var lazy_value = make_lazy(add, 2, 3);

该表达式目前不会被评估,但只有当您调用lazy_value 时:

lazy_value() => 5

这是我半天努力的结论

var make_lazy = function () {

   var innerFunction = null;
   var array = [];

   for (var i = 0; i < arguments.length; i++) {
     if (typeof arguments[i] == 'function') {
       innerFunction = arguments[i];
     } else {
      array.push(arguments[i]);
     }
    }

    innerFunction.apply(innerFunction, array);

    innerFunction();
};

我正在使用argumentsapply() 并认为我很接近?但是我在测试结果中得到了TypeError: lazy_sum is not a function at Object.exports.runInThisContext。任何帮助,特别是了解正在发生的事情,都值得赞赏。谢谢

【问题讨论】:

  • 最后两行调用innerFunction两次
  • 除了 Felix Kling 指出的问题之外,如果您的 innerFunction 的一个参数也是一个函数,会发生什么情况? (提示:哎呀!)我通常不会这样做,但由于你自己如此接近,这里有一个单线你可以作为参考:let makeLazy = (f, ...args) =&gt; x =&gt; f(...args);
  • 你没有从make_lazy返回函数剧透:function lazy(fn/*, args*/) { return fn.bind.apply(fn, [this].concat([].slice.call(arguments, 1))) }
  • 感谢大家的帮助。在您的帮助下,我添加了 return function () { innerFunction.apply(innerFunction, array); } 并且它起作用了:)。我现在明白我没有正确返回函数,直到现在我才知道我可以这样做。 注意:最后我还删除了innerFunction();

标签: function javascript-objects


【解决方案1】:
...

    return function() {
      return innerFunction.apply(this, array);
    };

};

再次感谢大家。问题解决了。

【讨论】:

    猜你喜欢
    • 2013-02-23
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    相关资源
    最近更新 更多