HTML Diff
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) =&gt; n &gt; 1, а вызывается она как callback(n, index). Это приводит к игнорированию index, при этом никаких ошибок типов не возникает.</p>
12 <p>В примере выше аргументом передается функция (n) =&gt; n &gt; 1, а вызывается она как callback(n, index). Это приводит к игнорированию index, при этом никаких ошибок типов не возникает.</p>