jQuery源码分析之Callbacks详解

2020-05-23 06:21:26易采站长站整理

                    }
                    //…省略部分代码
                };
            };
            //注册到window下
            window.Callbacks = Callbacks;
        }(window));

auto:

auto(memory)模型在jQuery中是以memory命名的,最初被这个命名给混淆了,仔细看了用法才确定改成auto——它的作用就是“第一次fire()之后,后续add()的函数自动执行”,以下情况可以用到:当添加一组函数到Callbacks之后,临时又需要追加一个函数,那么即时运行这个新追加的函数——不得不说,为了使用的便利,这个模式变得有点难以理解。实现起来就是在add()的时候判断是否是auto模型,如果是auto模型,则执行这个函数。 但是,我们需要在第一次fire()之后才自动执行,没有fire()过的Callbacks并不该被自动执行,并且,每次自动执行后,还需要把最后一次使用的参数传递传递给这个自动执行的函数。

或许大家会想到如下代码:


(function (window, undefined) {
            var Callbacks = function (once, auto) {
                var list = [],
                    fired,
                    lastData;//保存最后一次执行的参数
                return {
                    add: function (fn) {
                        if (list) {
                            list.push(fn);
                            // — 自动执行模式
                            //最后一次使用的参数传递过去,这里丢失了Context(上下文)