アンダースコアのメモ機能を実装しようとしています。引数から渡された関数からパラメータを引き出す
次のようにMemoizeが呼び出される必要があります。Memoizeは以前その保存された関数の呼び出し、およびなく、再計算(再実行機能)「を覚えている」必要があります
subtract = function(a, b) {
return a - b;
};
memoSub = _.memoize(subract);
memoSub(2, 1);
//1
、それは、これらの保存された値を返す必要があります。
私は次のような構造を設定しましたが、難しいのは、渡された関数のパラメータにアクセスして何らかの形で保存できるようにして、以前と同じかどうかを確認することです渡されたパラメータ。
以下は本質的に_.once
の実装であり、渡された関数の引数にはアクセスする必要はありません。私は_.memoize
_.memoize = function(func) {
var called = false;
//i'd rather this be var storedArgs = {};
var result;
return function() {
//i'd rather be checking if these args have been seen before
if (!called) {
result = func.apply(this, arguments);
called = true;
//i'd rather save the computed results to the storedArg obj here
}
return result;
};
};
func.apply
にそれを作るために、それを修正しようとしている私は、すなわち、自分の関数定義のfunc
後のすべてを関数を呼び出すと、マスターarguments
に渡すことができますが、どのように、私はアクセスすることができますパラメータ/引数func
?上で見たよう(この場合のパラメータは(a, b)
ある
編集:私は本当に何をする必要があるか疑うここに存在しないパラメータを何とかアクセスされています
return function(/*how can I "capture" what will go here?*/) {...}
'result = func.apply(this、arguments);'は、あなたがラップしている関数に 'arguments'を送ります。キャプチャするために他に何が必要ですか?あなたはすでに 'arguments'を持っています。 – zzzzBov