Полагаю, это может быть дубликат, но я пока не смог найти объяснения.
Вот мой пример кода:
const makeCalendar = () => {
const calendar = {};
calendar.xmas = ['December', 25];
calendar.newYear = ['January', 1];
return (day) => calendar[day];
}
calendar = makeCalendar();
const xmasArray = calendar('xmas');
console.log(calendar('xmas')); // [ 'December', 25 ]
xmasArray[1]++;
console.log(calendar('xmas')); // [ 'December', 26 ]
Поскольку элементы xmasArray
являются изменяемыми, я могу изменять переменные внутри области действия makeCalendar()
и, таким образом, повреждать замыкание, которое оно возвращает.Единственный способ решить эту проблему - вернуть анонимный массив [...calendar[day]]
(вместо calendar[day]
), который затем блокирует доступ внутри makeCalendar()
.
Мои вопросы: верно ли это?способ справиться с этой проблемой?Есть ли лучшие способы?Возможно, я не правильно понимаю, что происходит ...