чтобы не раздувать файл, решил вынести общие функции и переменные в отдельный файл
Ну вот практически уже используете модули, но ещё не совсем. Раз там какие-то переменные хранятся, значит для каждого калькулятора, видимо, нужна своя _копия_ этого общего куска.
Как вариант, оберните всё, что там общего, в класс или функцию или объект и создавайте для каждого калькулятора новую копию.
calc_init.js?1
не удачная идея. Именно потому, что возникают описанные в вопросе проблемы.
Лучше один раз его просто загрузить
<script src="calc_init.js"></script>
. Пусть там просто определяется единственная
функцияfunction calc_init(n, id) {
let el_script = document.createElement("script");
el_script.src = `/scripts/script_${n}.js`;
el_script.setAttribute('defer', '');
document.body.appendChild(el_script);
let el_div = document.createElement("div");
el_div.setAttribute('id', id);
document.body.appendChild(el_div);
}
и потом вызывать его функцию:
calc_init(1, 'id_calc_1'); // номер калькулятора и id HTML-элемента, куда его впихнуть
calc_init(3, 'id_calc_3');