Wie oben erwähnt, gibt es Probleme bei der Verwendung des obersten Bereichs in Ihrer Skriptdatei. Hier ist ein weiteres Problem: Die Skriptdatei wird möglicherweise in einem Kontext ausgeführt, der in einer Laufzeitumgebung nicht der globale Kontext ist.
Es wurde vorgeschlagen, das Globale window
direkt zuzuweisen . Dies ist jedoch auch zur Laufzeit abhängig und funktioniert nicht in Node usw. Dies zeigt, dass die Verwaltung tragbarer globaler Variablen einige sorgfältige Überlegungen und zusätzlichen Aufwand erfordert. Vielleicht werden sie es in zukünftigen ECMS-Versionen beheben!
Im Moment würde ich so etwas empfehlen, um eine ordnungsgemäße globale Verwaltung für alle Laufzeitumgebungen zu unterstützen:
/**
* Exports the given object into the global context.
*/
var exportGlobal = function(name, object) {
if (typeof(global) !== "undefined") {
// Node.js
global[name] = object;
}
else if (typeof(window) !== "undefined") {
// JS with GUI (usually browser)
window[name] = object;
}
else {
throw new Error("Unkown run-time environment. Currently only browsers and Node.js are supported.");
}
};
// export exportGlobal itself
exportGlobal("exportGlobal", exportGlobal);
// create a new global namespace
exportGlobal("someothernamespace", {});
Es ist ein bisschen mehr Tipparbeit, aber es macht Ihr globales Variablenmanagement zukunftssicher.
Haftungsausschluss: Ein Teil dieser Idee kam mir, als ich mir frühere Versionen von stacktrace.js ansah .
Ich denke, man kann auch Webpack oder andere Tools verwenden, um eine zuverlässigere und weniger hackige Erkennung der Laufzeitumgebung zu erhalten.