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();
};
我使用arguments
和apply()
,並認爲我靠近?不過,我在測試結果中獲得TypeError: lazy_sum is not a function at Object.exports.runInThisContext
。任何幫助,特別是理解正在發生的事情,值得讚賞。謝謝
最後兩行調用'innerFunction' *兩次*。 –
除了Felix Kling指出的問題之外,如果innerFunction的參數之一也是函數,會發生什麼情況? (提示:哎呀!)我通常不會這樣做,但因爲你自己親密得多,所以這裏有一個可以作爲參考的單線程:let letLazy =(f,... args)=> x => f(... args);' –
你沒有從'make_lazy'函數返回擾流器:'function lazy(fn/*,args * /){return fn.bind.apply(fn,[this ] .concat([]。slice.call(arguments,1))) }' –