pomelo中经常看到的utils.invokeCallback得用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/themagickeyjianan/article/details/88852368

背景:

在阅读或者使用pomelo时,经常看到utils.invokeCallback(cb);的用法, 当时没看懂,研究了下源码,其实很简单

1)代码

/**
 * Invoke callback with check
 */
var invokeCallback = function(cb) {
    if (typeof cb === 'function') {
        var len = arguments.length;
        if(len == 1) {
            return cb();
        }

        if(len == 2) {
            return cb(arguments[1]);
        }

        if(len == 3) {
            return cb(arguments[1], arguments[2]);
        }

        if(len == 4) {
            return cb(arguments[1], arguments[2], arguments[3]);
        }

        var args = Array(len - 1);
        for (i = 1; i < len; i++)
            args[i - 1] = arguments[i];
        cb.apply(null, args);
        // cb.apply(null, Array.prototype.slice.call(arguments, 1));
    }
};

function f(a, b, c, d) {
    console.log(a, b, c, d);
}

invokeCallback(f, 1, 2, 3, 4);

/*
1 2 3 4
 */

总结:很简单,就是为了方便传递参数,别的没啥意思。 和 cb(a,b,c,d); 这样传参数一样

猜你喜欢

转载自blog.csdn.net/themagickeyjianan/article/details/88852368