Функция started принимает объект info, деструктурирует из него свойства name и skill. Затем она переопределяет локальную переменную name значением "Alex Pool" и добавляет строку "delete" в массив skill. После этого возвращает новый объект с обновлённым name, изменённым массивом skill и дополнительным свойством online: true.
Дан следующий фрагмент кода:
Функция started принимает объект info, деструктурирует из него свойства name и skill.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Дан следующий фрагмент кода:
let info = {
name: "Alex",
skill: ["git", "react", "read"],
};
let started = (info: any) => {
let { name, skill } = info;
(name = "Alex Pool"), skill.push("delete");
return {
name,
skill,
online: true,
};
};
Объясните, что делает функция started с объектом info и опишите результат вызова started(info). Также обсудите, изменяется ли исходный объект info после вызова started(info).
Ответ
Функция started принимает объект info, деструктурирует из него свойства name и skill. Затем она переопределяет локальную переменную name значением "Alex Pool" и добавляет строку "delete" в массив skill. После этого возвращает новый объект с обновлённым name, изменённым массивом skill и дополнительным свойством online: true.
Важно, что массив skill в исходном объекте info мутируется — в него добавляется новый элемент "delete". Однако свойство name в исходном объекте не меняется, так как присваивание name = "Alex Pool" меняет только локальную переменную, а не поле объекта.
Пример вывода:
let result = started(info);
console.log(result);
// { name: "Alex Pool", skill: ["git", "react", "read", "delete"], online: true }
console.log(info.skill);
// ["git", "react", "read", "delete"] // изменился
console.log(info.name);
// "Alex" // не изменился
Таким образом, функция возвращает новый объект с обновлённым именем и флагом онлайн, но изменяет исходный массив навыков в объекте info.