Нет подробного объяснения того, что именно импорт и экспорт es6 делают под капотом. Кто-то описывает импорт как представление только для чтения. Проверьте код ниже:
// lib/counter.js
export let counter = 1;
export function increment() {
counter++;
}
export function decrement() {
counter--;
}
// src/main.js
import * as counter from '../../counter';
console.log(counter.counter); // 1
counter.increment();
console..log(counter.counter); // 2
Мой вопрос: если два модуля импортируют один и тот же модуль счетчика, а первый модуль увеличивает счетчик, будет ли второй модуль также видеть счетчик как увеличенный? Что под капотом делают «импорт» и «экспорт»? В каком контексте выполняется функция приращения? Что такое переменный объект функции приращения?
// lib/counter.js
export let counter = 1;
export function increment() {
counter++;
}
export function decrement() {
counter--;
}
// src/main1.js
import * as counter from '../../counter';
console.log(counter.counter); // 1
counter.increment();
console..log(counter.counter); // 2
// src/main2.js
import * as counter from '../../counter';
console.log(counter.counter); // what is the result of this, 1 or 2?
Мне кажется, что «экспорт» создает глобальный объект, к которому могут обращаться разные модули, и устанавливает контекст экспортируемой функции для этого объекта. Если это так, то дизайн зашит за меня, потому что модули не знают, что делают другие модули. Если два модуля импортируют один и тот же модуль (счетчик), один модуль вызывает функцию увеличения (пример выше), которая вызывает изменение значения (счетчика), а другой модуль этого не знает.