1

我今天感觉很愚蠢。我一直在看这段代码,试图追踪它,但我就是想不通:

  1. 它实际上是做什么的
  2. 这个怎么运作

据我所知,第一次调用它是唯一一次actioncallFn. 因此,第一次运行时,它会创建堆栈数组。然后我就输了。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);
    };
};
4

2 回答 2

1
于 2013-02-08T23:33:51.017 回答
0

记忆化是一种使用副作用来提高 - 在运行时 - 函数的性能而不改变其行为的技术。粗略地说,您可以通过存储在先前调用中返回的函数值并在进一步调用该函数时返回这些值而不是实际调用该函数来进行记忆。

阅读更多

于 2013-02-08T23:33:49.420 回答