今日はとても愚かな気分です。私はこのコードを見続け、追跡しようとしていますが、理解できません:
- 実際に行うことの意味
- 使い方
私が見る限り、最初に呼び出されたのaction
はcallFn
. そのため、最初に実行すると、スタック配列が作成されます。それから私はそれを失います。アクションには、渡されたコールバックをスタックに追加するだけの関数が割り当てられます。次に、実際にfn が呼び出され、その結果に基づいて、「action」が callFn (?!?) またはコールバックを呼び出す関数に設定されます。その後、スタック内のすべての呼び出しが呼び出されます。
私はコードで迷子になるのが嫌いですが、これは私を少し超えています。私よりも賢い人で「理解」できる人はいますか?
var memoize = function(fn) {
var callFn = function(callback) {
var stack = [callback];
action = function(callback) {
stack.push(callback);
};
fn(function(err, val) {
action = err ? callFn : function(callback) {
callback(null, val);
};
while (stack.length) stack.shift()(err, val);
});
};
var action = callFn;
return function(callback) {
action(callback);
};
};