Как создать функцию/переменную с проверкой, что они еще не созданы?

Существует js-файл, функции из которого, используют другие js-файлы.

Файл с функциями может быть запущен более 1 раза, как сделать так, чтобы функции и переменные не создавались дважды?

Если делаю проверку на существование функции/переменной, и все функции "пихаю" в if,
то функции не видны за его приделами. Как быть?
  • Вопрос задан
  • 70 просмотров
Решения вопроса 1
Tolly
@Tolly Автор вопроса
Раз вариантов на js нет.

Вопрос решил через php.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@zkrvndm
Софт для автоматизации
Чтобы функции был видны глобально, достаточно объявить их в глобальной области видимости через window!
window.eval(function_code);

P. S. Проверить существование функции можно через typeof.
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
чтобы не раздувать файл, решил вынести общие функции и переменные в отдельный файл

Ну вот практически уже используете модули, но ещё не совсем. Раз там какие-то переменные хранятся, значит для каждого калькулятора, видимо, нужна своя _копия_ этого общего куска.

Как вариант, оберните всё, что там общего, в класс или функцию или объект и создавайте для каждого калькулятора новую копию.

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');
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы