var invokeCb = function(cb) {
console.log( arguments.slice(1));
console.log( Array.prototype.slice.call(arguments, 1));
}
invokeCb('aa','bb','cc','dd');
为什么 console.log( arguments.slice(1)); 这句是错误 而 console.log( Array.prototype.slice.call(arguments, 1)); 而这句是正常的
求解
2 回复
给你讲的详细点,好理解~ 函数的 arguments 对象并不是一个数组,类似数组具有数字索引和length。只有真正的数组对象才slice方法。 那么通过Array.prototype.slice.call调用,把arguments对象转化为真正的Array对象。 类似下面代码功能 var args = []; for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); } 一般情况下面2种方法都能实现arguments转数组 var args = Array.prototype.slice.call(arguments); var args = [].slice.call(arguments, 1); 一般情况下arguments.length较小时用var args = [].slice.call(arguments, 1); 性能比较好。 当arguments.length比较大时var args = Array.prototype.slice.call(arguments);性能好。