ES6: Параметры по умолчанию
ES5 реализации
Если вы просмотрите исходный код любой библиотеки, то с огромной долей вероятности обнаружите, что там используется паттерн “параметры по умолчанию”. Работает это следующим образом:
Функция sum
принимает два параметра a
и b
и возвращает их сумму. Если параметр b
не был передан, то он автоматически становится равным 20
, если же не было передано ни одного параметра − a
присваивается значение 10
, а b
− 20
. Всё работает хорошо до тех пор, пока не появляется необходимость передать ложное значение, например, ноль:
Для того, чтобы избежать подобных проблем, можно использовать одно из следующих решений:
ES6 реализация
С релизом ES6 появилась возможность задавать параметры по умолчанию при объявлении функции:
Чтобы пропустить какой-либо параметр достаточно передать в функцию undefined
(параментр не будет пропущен при передаче любого другого ложного значения). Новая синтаксическая конструкция сочетает в себе несколько прошлых реализаций и в большей степени похожа на a !== undefined ? a : 10
, чем на более распросраненный паттерн a || 10
.
Подобная реализация позволяет не только присваивать определённые значения, но и вычислять их динамически с помощью простых выражений или функций:
Тем не менее, использовать переменную в своей же инициализации нельзя:
Подобное поведение называется временной мёртвой зоной. Как и при объявлении переменных с помощью операторов let
и const
, имя переменной z
резервируется, поэтому интерпретатор никогда не использует переменную с таким же именем из более высокой области видимости.
Комментарии