Что выведет код 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 ошибок.