Як зазначалося вище, у вашому файлі сценарію виникають проблеми з використанням найвищої області. Ось ще одна проблема: Файл сценарію може запускатися з контексту, який не є глобальним контекстом у якомусь середовищі виконання.
Запропоновано віднести глобальний до 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 або інші інструменти, щоб отримати більш надійне та менш хакерське виявлення середовища виконання.