传递比函数声明更多的参数是不是很糟糕?

时间:2010-03-26 17:56:22

标签: javascript

我有一个功能

function callback(obj){...}

是否可以传入比函数签名中声明的更多的对象? 例如这样称呼它:

callback(theObject, extraParam);

我在Firefox上尝试过它并没有出现问题,但是这样做不好吗?

2 个答案:

答案 0 :(得分:34)

JavaScript允许这样做,你可以将任意数量的参数传递给函数。

它们可以在arguments对象中访问,该对象是一个类似数组的对象,其数字属性包含调用函数时使用的参数值,length属性告诉您调用也使用了多少个参数,以及一个callee属性,它是对函数本身的引用,例如你可以写:

function sum(/*arg1, arg2, ... , argN  */) { // no arguments defined
  var i, result = 0;
  for (i = 0; i < arguments.length; i++) {
    result += arguments[i];
  }
  return result;
}
sum(1, 2, 3, 4); // 10

arguments对象可能看起来像一个数组,但它是一个普通的对象,它继承自Object.prototype,但是如果你想在它上面使用Array方法,你可以直接从它调用它们。 Array.prototype,例如,获取实数组的常见模式是使用数组slice方法:

function test () {
  var args = Array.prototype.slice.call(arguments);
  return args.join(" ");
}
test("hello", "world"); // "hello world"

此外,您可以使用函数对象的length属性知道函数期望的参数数量:

function test (one, two, three) {
  // ...
}
test.length; // 3

答案 1 :(得分:2)

是的 - 这是一个很好的做法,是一个强大的JavaScript功能