开发者

Is it bad to pass more arguments than the function declares? [closed]

开发者 https://www.devze.com 2022-12-24 23:53 出处:网络
Closed. This question is opinion-based. It is not currently accepting answers. 开发者_JAVA技巧 Want to improve this question? Update the question so it can be answered with facts and citati
Closed. This question is opinion-based. It is not currently accepting answers. 开发者_JAVA技巧

Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.

Closed 3 years ago.

Improve this question

I have a function

function callback(obj){...}

Is it okay to pass in more objects than were declared in the function signature? e.g. call it like this:

callback(theObject, extraParam);

I tried it out on Firefox and it didn't seem to have a problem, but is it bad to do this?


JavaScript allows this, you can pass any arbitrary number of arguments to a function.

They are accessible in the arguments object which is an array-like object that has numeric properties containing the values of the arguments that were used when the function was invoked, a length property that tells you how many arguments have been used on the invocation also, and a callee property which is a reference to the function itself, for example you could write:

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

The arguments object may look like an array, but it is a plain object, that inherits from Object.prototype, but if you want to use Array methods on it, you can invoke them directly from the Array.prototype, for example, a common pattern to get a real array is to use the Array slice method:

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

Also, you can know how many arguments a function expects, using the length property of the function object:

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


Yes do it - its good practice and is a powerful JavaScript feature

0

精彩评论

暂无评论...
验证码 换一张
取 消