Что выведет код Junior Области видимости и замыкания обновлено
Функция once на замыкании
Вопрос
Что выведет код? По строке на каждый вывод.
function once(fn) {
let done = false;
let result;
return (...args) => {
if (!done) {
done = true;
result = fn(...args);
}
return result;
};
}
const init = once((n) => {
console.log('init ' + n);
return n * 2;
});
console.log(init(5));
console.log(init(7));
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: init 5, 10, 10. done и result живут в замыкании обёртки.
Что выведет
init 5
10
10
Разбор
done и result живут в замыкании обёртки. Первый вызов запускает fn: печатается init 5, результат 10 сохраняется и выводится. Второй вызов видит done === true, fn не вызывается, аргумент 7 игнорируется, возвращается сохранённое 10.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.