JavaScript: Функции с переменным числом параметров
Интересная особенность некоторых функций — принимать переменное число параметров. Речь не идет о значениях по умолчанию. Посмотрите на этот пример:
Math.max(1, 10, 3); // 10Функция Math.max() находит максимальное значение среди переданных параметров. Как вы думаете, сколько параметров она ожидает на вход? Если открыть документацию этой функции, то мы увидим странную конструкцию:
Math.max([value1[, value2[, ...]]])
Такая запись говорит о том, что эта функция принимает на вход любое число параметров (и даже может быть вызвана без них). Необязательность передаваемых параметров описывается скобками [ ], точно так же описываются и опциональные параметры, у которых есть значения по умолчанию. Возможность передачи любого числа параметров зашита в этой части [, ...].
Math.max(1, -3, 2, 3, 2); // 3Все, что указывается в квадратных скобках, не обязательно. В такой записи Math.max([value1[, value2[, ...]]]) таких скобок несколько, и они вложены друг в друга. Разберем каждую из них:
- Первые квадратные скобки содержат
[value1[, value2[, ...]]], это значит, что можно вызывать функцию без параметров, так как эти квадратные скобки содержат все, что передается в функцию. Если убрать все содержимое этих скобок и сами скобки, то останетсяMath.max()— вызов без параметров. - Вторые квадратные скобки вложены в первые и содержат
[, value2[, ...]]. Они указывают на то, что если мы указали первый параметр, то можно опционально указать второй параметр. Без этих скобок и их содержимого, будет запись видаMath.max([value1]). - Третьи квадратные скобки вложены во вторые и содержат
[, ...]. Многоточие указывает на то, что параметров может быть сколько угодно. Если убрать эти скобки и их содержимое, то получится запись видаMath.max([value1[, value2]]).
Запятая стоит внутри квадратных скобок, так как если мы не указываем параметр, то запятая не нужна. Иначе вызов с одним параметром выглядел бы так Math.max(value1,).
Аналогично работает функция Math.min(), только она ищет наименьшее значение:
Math.min(1, 10, 3); // 1
Math.min(1, -3, 2, 3, 2); // -3Задание
Найдите минимальное значение среди чисел 3, -3, 10, 22, 0 с помощью функции Math.min() и выведите результат на экран.
Полезное
Ваше упражнение проверяется по этим тестам
// @ts-check
import { expect, test, vi } from 'vitest';
test('variadic parameters', async () => {
const consoleLogSpy = vi.spyOn(console, 'log');
await import('./index.js');
const firstArg = consoleLogSpy.mock.calls.join('\n');
expect(firstArg).toBe('-3');
});Решение учителя откроется через:
20:00
