02.i ES6 Parameters
В ES6 работа с параметрами функции была существенно расширена:
default parameter values
rest parameters (
varargs)deconstructing on parameters
spread arguments
Default Parameters
Параметр по умолчанию используется при отсутствующем параметре или равном undefined. При передаче любого значения, кроме undefined, включая пустую строку, ноль или null, параметр считается переданным, и значение по умолчанию не используется. Параметры по умолчанию могут быть не только значениями, но и выражениями и вызовами функций.
Традиционный прием для эмуляции параметров по умолчанию в ES5:
function pair(x, y) {
var x = x || 0;
var y = y || 0;
return [x, y];
}Синтаксис ES6:
function showMenu(title = "Без заголовка", width = 100, height = 200) {
alert(`${title} ${width} ${height}`);
}
function sayHi(who = getCurrentUser().toUpperCase()) {
alert(`Привет, ${who}!`);
}Параметры могут ссылаться друг на друга в порядке своего объявления:
Значения параметров по умолчанию, а так же функции, используемы для параметров по умолчанию не видят область видимости, формируемую основным телом функции.
Если необходимо, что бы функция обладала обязательным параметром, то можно использовать следующий прием:
...rest parameters
...rest parametersОператор rest (…) оператор записывает все оставшиеся переданные аргументы функции в соответствующий массив, с методами map, forEach и другими, в отличие от arguments:
Использование rest позволяет полностью заменить использование псевдо-массива arguments. Сочетая rest и деструктуризацию можно иметь как массив, так и отдельные параметры:
Destruction in Parameters
Если хочется, чтобы функция могла быть вызвана вообще без аргументов — нужно добавить ей параметр по умолчанию — уже не внутрь деструктуризации, а в самом списке аргументов:
Option Object (Named parameters)
Можно реализовывать именованные параметры через передачу объекта (option object):
В ES6 подобную логику можно упростить при помощи деструкции параметров вместе со значениями по умолчанию:
spread operator
spread operatorОператор spread применяется к любой итерируемой структуре и преобразует её в последовательность значений. Чаще всего используется при вызове функции для преобразования структуры в последовательность аргументов, передаваемых в функцию.
Части массива могут быть преобразованы в значения:
Оператор spread выглядит так же как и оператор rest (...) но противоположен ему по смыслу. Оператор rest используется только внутри функции, тогда как оператор spread только при вызове функции или конструктора.
Вместо массива со spread можно использовать любые итерируемые структуры, такие как строки, генераторы, объекты (?).
При строках:
В массивах:
Преобразование любой итерируемой сущности в массив:
При генераторе
Last updated
Was this helpful?