Короче говоря, у меня есть модуль, который я хочу многократно использовать на странице.
Это похоже на реальную проблему, которую нужно решить.Вместо этого импортируйте модуль один раз, используйте функцию внутри него дважды.Модули, как правило, не должны делать что-либо при импорте (кроме небольшого количества настроек), только позже по запросу.Таким образом, глобальные части модуля будут запускаться один раз, создавая глобальный const
(но он не должен быть глобальным, это должен быть экспортированный const
из модуля), и у вас не будет проблемы.
Но условное создание глобальной константы - интересная проблема.Если вы действительно хотите глобальный, вы можете использовать Object.defineProperty
, чтобы создать его на window
с writable: false
.(Это не совсем то же самое. Свойства window
[глобальный объект] являются глобальными, но const
создает глобальные переменные, которые не являются свойствами window
. Тем не менее, вероятно, достаточно близко.)
Пример:
"use strict";
if (typeof THIS_DOESNT_EXIST === "undefined") {
Object.defineProperty(window, "THIS_DOESNT_EXIST", {
value: "foo",
writable: false, // false is the default
configurable: false, // these are just for emphasis,
enumerable: true // or false, your call
});
}
console.log(THIS_DOESNT_EXIST);
THIS_DOESNT_EXIST = 42;
console.log(THIS_DOESNT_EXIST);