2016-07-29 116 views
1

传递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。任何帮助,特别是理解正在发生的事情,值得赞赏。谢谢

+3

最后两行调用'innerFunction' *两次*。 –

+1

除了Felix Kling指出的问题之外,如果innerFunction的参数之一也是函数,会发生什么情况? (提示:哎呀!)我通常不会这样做,但因为你自己亲密得多,所以这里有一个可以作为参考的单线程:let letLazy =(f,... args)=> x => f(... args);' –

+1

你没有从'make_lazy'函数返回扰流器:'function lazy(fn/*,args * /){return fn.bind.apply(fn,[this ] .concat([]。slice.call(arguments,1))) }' –

回答

0
... 

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

}; 

再次感谢所有。问题解决了。