Разве плохо передавать больше аргументов, чем объявляет функция?

У меня есть функция

function callback(obj){...}

Можно ли передавать больше объектов, чем было объявлено в сигнатуре функции? например, назвать это так:

callback(theObject, extraParam);

Я попробовал это на Firefox, и у него не было проблем, но плохо ли это делать?

Ответы

Ответ 1

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, например, общий шаблон для получения реального массива заключается в использовании метода Array 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

Ответ 2

Да, это - его хорошая практика и мощная функция JavaScript