繁体   English   中英

这两种在JavaScript函数中利用arguments对象的方式有什么区别?

[英]What is the difference between these two ways to leverage the arguments object in a JavaScript function?

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]

本质上有什么区别? 使用一种方法是否比使用另一种方法具有性能优势? 还是前者更容易输入?

两者都做同样的事情,那就是调用数组.slice()方法。 第一种方法是通过从一个新的空数组进行隐式原型查找来获取函数,另一种方法显式地转到Array.prototype对象。 性能可能存在差异,但并不重要或无关紧要,因为两种方式都将浪费很多性能:将arguments对象从函数中传递出去可能会使运行时系统放弃优化功能。

为避免性能下降,应改为使用简单的本地for循环:

function foo() {
  var args = [];
  for (var i = 0; i < arguments.length; ++i) args[i] = arguments[i];
  // ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM