Come accennato in precedenza, esistono problemi con l'utilizzo dell'ambito più elevato nel file di script. Ecco un altro problema: il file di script potrebbe essere eseguito da un contesto che non è il contesto globale in un ambiente di runtime.
È stato proposto di assegnare window
direttamente il globale a . Ma anche questo dipende dal tempo di esecuzione e non funziona in Node ecc. Ciò dimostra che la gestione delle variabili globali portabile richiede un'attenta considerazione e uno sforzo extra. Forse lo risolveranno nelle future versioni di ECMS!
Per ora, consiglierei qualcosa di simile per supportare una corretta gestione globale per tutti gli ambienti di runtime:
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", {});
È un po 'più di digitazione, ma rende la gestione delle variabili globali a prova di futuro.
Dichiarazione di non responsabilità: parte di questa idea mi è venuta guardando le versioni precedenti di stacktrace.js .
Penso che si possa anche usare Webpack o altri strumenti per ottenere un rilevamento più affidabile e meno hacker dell'ambiente di runtime.