Как объявить CONST, когда он не существует в Javascript - PullRequest
0 голосов
/ 15 октября 2018

Короче говоря, у меня есть модуль, который я хочу многократно использовать на странице.В этом модуле у меня была глобальная константа имени события.Проблема возникает при объявлении второго использования этого модуля, так как константа уже была объявлена.Тем не менее, я не могу переместить его в if / else, поскольку область видимости сделает константу невозможной для использования в другом месте.Что мне делать?

Несколько простых кодов для моей задачи:

Модуль:

const THIS_IS_MY_EVENT = 'thisIsMyEvent';

// extra code down here

Страница: (Я использую движок веток для включения файла, но я не думаю, что он связан)

<script src="/path/to/file.js">
<script src="/path/to/file.js">

В моем случае это не сработает:

if (typeof (THIS_IS_MY_EVENT) == undefined) {
    const .... //this will limit the scope of my const
}

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 15 октября 2018

Короче говоря, у меня есть модуль, который я хочу многократно использовать на странице.

Это похоже на реальную проблему, которую нужно решить.Вместо этого импортируйте модуль один раз, используйте функцию внутри него дважды.Модули, как правило, не должны делать что-либо при импорте (кроме небольшого количества настроек), только позже по запросу.Таким образом, глобальные части модуля будут запускаться один раз, создавая глобальный 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);
...