我今天感觉很愚蠢。我一直在看这段代码,试图追踪它,但我就是想不通:
- 它实际上是做什么的
- 这个怎么运作
据我所知,第一次调用它是唯一一次action
与callFn
. 因此,第一次运行时,它会创建堆栈数组。然后我就输了。Action 被分配了一个函数,该函数只是将传递的回调添加到堆栈中。然后实际调用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);
};
};