jQuery源码分析之Callbacks详解(4)

once:
once让这个callbacks中的函数运行一次之后就不再运行。原理非常的简单,上面的代码中,我们可以看见有一个变量list承接函数列表,所以我们只需要把过去执行过的代码清空即可。我们用一个全局变量,保存当前执行模型,如果是once模型,就在fireWith()里让这个list失效即可:

复制代码 代码如下:


(function (window, undefined) {
            var Callbacks = function (once) {
                //通过闭包保护这些私有变量
                var list = [],//回调函数列表
                    fired;//是否执行过
                //返回一个闭包的Callbakcs对象
                return {
                    //...省略部分代码
                    fireWith: function (context, data) {
                        //触发回调函数,并指定上下文
                        if (list) {
                            fired = true;
                            for (var i = 0, len = list.length; i < len; i++) {
                                //当Callbacks中某一个函数返回false的时候,停止Callbacks后续的执行
                                if (list[i].apply(context, data) === false)
                                    break;
                            }
                        }
                        //如果配置了once模型,则全局变量once为true,则list重置
                        if (once) list = undefined;
                        return this;
                    }
                    //...省略部分代码
                };
            };
            //注册到window下
            window.Callbacks = Callbacks;
        }(window));

auto:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wgfzyd.html