看pomelo sample 源码
exp.playerLeave = function(args, cb) {
var areaId = args.areaId;
var playerId = args.playerId;
var player = area.getPlayer(playerId);
if (!player) {
utils.invokeCallback(cb);
return;
}
area.removePlayer(playerId);
area.getChannel().pushMessage({route: 'onUserLeave', code: consts.MESSAGE.RES, playerId: playerId});
utils.invokeCallback(cb); //问题1
};
utils
// callback util
utils.invokeCallback = function(cb) {
if (!!cb && typeof cb == 'function') {
cb.apply(null, Array.prototype.slice.call(arguments, 1));//问题2
}
};
问题1 :直接cb(null , obj)
不好吗?
问题2:Array.prototype.slice.call(arguments, 1)
不就是 arguments.slice(1);
吗?
11 回复
@dayuoba cb虽然只有一个参数,对应的是arguments[0] , 调用函数的时候可以多于一个参数,只能通过arguments使用, arguments有length属性 可是arguments为何不实现为Array呢?