在Array.prototype.slice
方法的文档中,它说:
可以使用Function.prototype的.call函数完成绑定 它也可以使用[] .slice.call(arguments)而不是 Array.prototype.slice.call。
function getArgs() {
var args = [].slice.call(arguments);
return args;
}
getArgs(1,2,3); // returns [1, 2, 3]
function getArgs2() {
var args = Array.prototype.slice.call(arguments);
return args;
}
getArgs2(1,2,3); // returns [1, 2, 3]
基本上有什么区别?使用其中一种方法是否有性能优势?或者前者更容易输入?
答案 0 :(得分:2)
这两者都做同样的事情,即调用数组.slice()
方法。第一种方法通过来自新空数组的隐式原型查找来获取函数,另一种方式明确地转到Array.prototype
对象。可能存在性能差异,但它并不重要或相关,因为无论如何两种方式都会丢失大量性能:将arguments
对象传递出函数可能会使运行时系统放弃优化函数。
为避免性能损失,应使用简单的本地for
循环:
function foo() {
var args = [];
for (var i = 0; i < arguments.length; ++i) args[i] = arguments[i];
// ...
}