jQuery源码分析之Callbacks详解

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

                item;
            while ((item = list.shift())) {//没有直接判定length,加速
                // 为什么这里用call就可以,而apply就不行?
                //搞定 – apply的第二个参数必须是一个array对象(没有验证array-like是否可以,而call没有这个要求)
                //apply是这样描述的:如果 argArray(第二个参数) 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
                fn.call(window, item);
            }
        },
        inArray = function () {                     //检测数组中是否包含某项,返回该项索引
            //预编译
            return isIndexOf ? function (array, elem, i) {
                if (array)
                    return isIndexOf.call(array, elem, i);
                return -1;
            } : function (elem, array, i) {
                var len;
                if (array) {
                    len = array.length;
                    i = i ? i < 0 ? Math.max(0, len + i) : i : 0;
                    for (; i < len; i++) {
                        if (i in array && array[i] === elem) {
                            return i;