jQuery源码分析之Callbacks详解

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

                    if (stack.length)//先把下面清空list状态的代码拦截掉,再判定是否有栈
                        fire(stack.shift()); //从栈头部取出,并递归fire()方法
                }
                else if (auto)    //代码走到这里,证明已经配置了option.once(只执行一次),于是把list清空
                    list = [];
                else                //证明没有配置auto,但是配置了once,那么祭出终极大法,直接废了这个callbacks对象
                    self.disable();
            };
        var self = {
            add: function () {//添加一个回调函数
                if (list) {
                    var start = list.length;
                    (function addCallback(args) {
                        each(args, function (item) {
                            if (isFunction(item)) {//是函数,则压入回调列表
                                list.push(item);
                                //注意typeof 和Object.prototype.toString是不一样的
                            } else if (toString.call(item) === ‘[object Array]’) {//如果是个数组,则递归压入回调列表,这个判定抛弃了array-like