На данный вопрос уже ответили:
Функция использует деструктурирование для разбора аргументов. Но у нее есть проблема: вылетает ошибка, когда передается опциональный объект без свойства enable. Поскольку все параметры имеют значения по умолчанию, хотелось бы чтобы функция не возвращала ошибку. Существует ли простой способ решить эту проблему?
function go(options) {
let {
speed = 4,
enable: {hyperdrive = false,
frobnifier = true}
} = options;
console.log(
"speed=", speed,
"hyperdrive:", hyperdrive,
"frobnifier:", frobnifier
);
}
go({speed: 5});
2) Типичная ошибка в JavaScript. Мы создаем ряд функций в цикле и ссылаемся на внешнюю переменную из этих функций. Все они будут ссылаться на одну и ту же переменную, которая в конечном итоге будет увеличена до 10. В данном примере callbacks [2] не выводит в консоль 2. Выводится 10, как и во всех функциях в массиве. Какое решение для таких ситуаций в ES5?
var callbacks = [];
for (var i = 0; i < 10; i++) {
callbacks.push(function() { console.log(i) })
}
callbacks[2]();
1) Все по аналогии с присвоением дефолтных значений:
function go(options) {
let {
speed = 4,
enable: {
hyperdrive = false,
frobnifier = true
} = {}
} = options;
console.log(
"speed=", speed,
"hyperdrive:", hyperdrive,
"frobnifier:", frobnifier
);
}
go({speed: 5});
2) Как вариант, передать в контекст i:
var callbacks = [];
for (var i = 0; i < 10; i++) {
(function( index ) {
callbacks.push(function() { console.log(index) })
})(i);
}
callbacks[2]();
Сборка персонального компьютера от Artline: умный выбор для современных пользователей