将所有参数转发给另一个函数

时间:2018-02-07 12:21:52

标签: javascript ecmascript-6

在ES6中,可以使用...arguments将一个函数的所有参数传递给另一个函数,例如。

function foo(a, b) {
  return bar(...arguments);
}

function bar(a, b) {
  return a + b;
}

foo(1, 2); // returns 3

我"发现"这个成语本身,我想知道它是否有任何缺点,或者它是否被认为是一种不好的做法?

3 个答案:

答案 0 :(得分:4)

  

......我想知道它是否有任何缺点......

不是真的,除了几点要注意:

    松散模式下的
  • arguments存在一些轻微的性能问题(在正常情况下无需担心)。
  • 箭头函数没有自己的arguments,因此在箭头函数中不起作用;您将获得ReferencError(如果箭头函数位于顶层)或最近的包含arguments函数(或方法)的function(因为箭头关闭 arguments [以及thissuper]),这可能不是您想要的。

您正在使用点差表示法,因此您也可以考虑使用其他表示法:

function foo(...args) {
  return bar(...args);
}

function bar(a, b) {
  return a + b;
}

console.log(foo(1, 2)); // returns 3

arguments没有(次要)性能问题,在箭头函数中有效,并且清楚你的意思。

答案 1 :(得分:1)

函数中的

arguments变量包含传递给函数的所有参数。如果您有不同数量的参数并且您不知道有多少参数,则可以使用此选项。

ES6 开始,如果要将函数传递给各种参数,可以使用rest parameters

function foo(...rest) {
  return bar(...rest);
}

function bar(a, b) {
  return a + b;
}

foo(1, 2);

答案 2 :(得分:1)

实际上没有任何缺点,你只需要确保如果你的参数是一个数组,它就是你正在调用的函数的参数的正确顺序。