0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В этом уроке мы разберем опциональные параметры в функциях.</p>
1
<p>В этом уроке мы разберем опциональные параметры в функциях.</p>
2
<h2>Использование опциональных параметров в функциях</h2>
2
<h2>Использование опциональных параметров в функциях</h2>
3
<p>Опциональные параметры в функциях используются во встроенных функциях JavaScript, когда параметр необязателен. Опциональные параметры задаются с помощью знака вопроса после имени переменной перед двоеточием, как в примере ниже:</p>
3
<p>Опциональные параметры в функциях используются во встроенных функциях JavaScript, когда параметр необязателен. Опциональные параметры задаются с помощью знака вопроса после имени переменной перед двоеточием, как в примере ниже:</p>
4
<p>В таком случае реальный тип переменной separator будет string | undefined (string или undefined). Другой вариант задать опциональный параметр - присвоить значение по умолчанию:</p>
4
<p>В таком случае реальный тип переменной separator будет string | undefined (string или undefined). Другой вариант задать опциональный параметр - присвоить значение по умолчанию:</p>
5
<p>Разработчики пытаются применять эту логику к колбекам, но сталкиваются с ошибками. Разберем, почему так происходит.</p>
5
<p>Разработчики пытаются применять эту логику к колбекам, но сталкиваются с ошибками. Разберем, почему так происходит.</p>
6
<h2>Колбек функции</h2>
6
<h2>Колбек функции</h2>
7
<p>Представим функцию filter(), которая фильтрует числовые массивы по переданному предикату:</p>
7
<p>Представим функцию filter(), которая фильтрует числовые массивы по переданному предикату:</p>
8
<p>Как и во встроенном методе filter(), колбек этой функции принимает индекс обрабатываемого элемента массива в качестве второго параметра. Обычно индексы не используют, но иногда фильтрация массива все таки делается на их основе - в этом случае их указывают.</p>
8
<p>Как и во встроенном методе filter(), колбек этой функции принимает индекс обрабатываемого элемента массива в качестве второго параметра. Обычно индексы не используют, но иногда фильтрация массива все таки делается на их основе - в этом случае их указывают.</p>
9
<p>Было бы логичным указать этот параметр как необязательный, но это так не работает:</p>
9
<p>Было бы логичным указать этот параметр как необязательный, но это так не работает:</p>
10
<p>В этом случае ошибка обозначает, что теоретически undefined может оказаться внутри колбека. Так происходит из-за необязательности параметра. По идее undefined не окажется в колбеке, потому что индекс всегда определен, но ошибка все равно появляется. Чтобы решить эту ситуацию, нужно отказаться от опциональности:</p>
10
<p>В этом случае ошибка обозначает, что теоретически undefined может оказаться внутри колбека. Так происходит из-за необязательности параметра. По идее undefined не окажется в колбеке, потому что индекс всегда определен, но ошибка все равно появляется. Чтобы решить эту ситуацию, нужно отказаться от опциональности:</p>
11
<p>Колбеки с меньшим числом параметров всегда могут появляться там, где они же ожидаются с большим числом параметров, при условии, что типы общих параметров совпадают.</p>
11
<p>Колбеки с меньшим числом параметров всегда могут появляться там, где они же ожидаются с большим числом параметров, при условии, что типы общих параметров совпадают.</p>
12
<p>В примере выше аргументом передается функция (n) => n > 1, а вызывается она как callback(n, index). Это приводит к игнорированию index, при этом никаких ошибок типов не возникает.</p>
12
<p>В примере выше аргументом передается функция (n) => n > 1, а вызывается она как callback(n, index). Это приводит к игнорированию index, при этом никаких ошибок типов не возникает.</p>