今天我感觉很愚蠢。 我一直在看这段代码,试图跟踪它,但我只是想不通:这个memoize函数是如何工作的?
- 什么它实际上是为了做
- 它是如何工作
至于我可以看到,这是第一次,这是唯一的时间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);
};
};
这有点神秘。这里的参考是一个更容易阅读memoize函数形式的版本underscore.js:http://underscorejs.org/docs/underscore.html#section-60 – 2013-02-08 23:14:32
你有一个如何看待它被使用的例子? – 2013-02-08 23:19:25
你从哪里得到这个功能? – Bergi 2013-02-08 23:21:43