Довільні аргументи функції - for web

Нещодавно ми обговорили, як можна задати для функції значення аргументів за замовчуванням. Це дає нам деяку гнучкість в роботі з аргументами. Але що, якщо нам знадобиться функція, приймаюча будь-яку кількість аргументів? Скажімо, нам потрібна функція, що повертає суму всіх переданих аргументів. Як же можна вирішити цю задачу?

Незважаючи на те, що цей об'єкт не є масивом, він поводиться як масив. Arguments містить кожен аргумент, переданий в функцію.

Тепер, коли ми знайомі з об'єктом arguments. ми можемо легко реалізувати потрібну функцію, яка буде працювати з будь-якою кількістю переданих аргументів:

Одна важлива проблема, що виникає при роботі з arguments - цей об'єкт не є справжнім масивом. Ми можемо переконатися в цьому, виконавши наступний код:

Отже, це не масив. Чи є якась різниця в використанні?

На жаль, різниця є. Arguments не підтримує стандартні методи масиву на кшталт push. pop. slice. indexOf або sort.

Це може перешкодити вам, особливо якщо ви передасте arguments в будь-яку функцію, яка очікує масив.

Вирішення цієї проблеми легкоё для використання, але трохи складне для розуміння.

Розберемо цей код:

  1. Ми створюємо порожній масив.
  2. Використовуємо метод масиву slice.
  3. Використовуємо метод call, щоб змусити slice обробляти об'єкт arguments, а не порожній масив.

Виклик методу slice без вказівки індексу, з якого йому слід починати обробку, поверне нам вихідний масив. І це те, що нам потрібно: ми отримали масив, що містить всі аргументи, передані в функцію.

Схожі статті