版权声明:本文为博主原创文章,未经博主允许不得转载。 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); 这样传参数一样