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

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

function callback(obj){...}

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

callback(theObject, extraParam);

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

2 ответа

Решение

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

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

Другие вопросы по тегам