今天我感覺很愚蠢。 我一直在看這段代碼,試圖跟蹤它,但我只是想不通:這個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