Как упоминалось выше, возникают проблемы с использованием самой верхней области в вашем файле сценария. Вот еще одна проблема: файл сценария может запускаться из контекста, который не является глобальным контекстом в некоторой среде выполнения.
Было предложено назначить глобальное значение window
напрямую. Но это также зависит от времени выполнения и не работает в Node и т. Д. Это показывает, что переносимое управление глобальными переменными требует некоторого внимательного рассмотрения и дополнительных усилий. Возможно, они исправят это в будущих версиях ECMS!
На данный момент я бы порекомендовал что-то подобное для поддержки надлежащего глобального управления для всех сред выполнения:
var exportGlobal = function(name, object) {
if (typeof(global) !== "undefined") {
global[name] = object;
}
else if (typeof(window) !== "undefined") {
window[name] = object;
}
else {
throw new Error("Unkown run-time environment. Currently only browsers and Node.js are supported.");
}
};
exportGlobal("exportGlobal", exportGlobal);
exportGlobal("someothernamespace", {});
Это немного больше печатает, но это делает ваше управление глобальными переменными перспективным.
Отказ от ответственности: часть этой идеи пришла мне в голову, когда я смотрел на предыдущие версии stacktrace.js .
Я считаю, что можно также использовать Webpack или другие инструменты, чтобы получить более надежное и менее хакерское обнаружение среды выполнения.