Выбор ответа Middle Модули обновлено

Деструктуризация require и изменение значения

Вопрос

Что выведет main.cjs?

// counter.cjs
let count = 0;
module.exports = { count, inc() { count++; } };

// main.cjs
const { count, inc } = require('./counter.cjs');
inc();
console.log(count, require('./counter.cjs').count);

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: 0 0. При создании module.exports в свойство count скопировалось число 0. inc() меняет локальную переменную модуля, но не свойство объекта.

Варианты ответа

  1. 1 1
  2. 0 1
  3. 0 0правильный ответ
  4. 1 0

Разбор

При создании module.exports в свойство count скопировалось число 0. inc() меняет локальную переменную модуля, но не свойство объекта. Деструктуризация в main.cjs ещё раз скопировала 0. Повторный require возвращает тот же закешированный объект, в котором тоже 0. Чтобы снаружи видеть актуальное значение, экспортируют геттер или функцию getCount. В ESM с export let вывод был бы другим.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.