2016-07-29 24 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); 
    }; 

}; 

再次感謝所有。問題解決了。