Выбор ответа 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 10 10 0правильный ответ1 0
Разбор
При создании module.exports в свойство count скопировалось число 0. inc() меняет локальную переменную модуля, но не свойство объекта. Деструктуризация в main.cjs ещё раз скопировала 0. Повторный require возвращает тот же закешированный объект, в котором тоже 0. Чтобы снаружи видеть актуальное значение, экспортируют геттер или функцию getCount. В ESM с export let вывод был бы другим.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.