Come accennato in precedenza, ci sono problemi con l'utilizzo dell'ambito più in alto nel file di script. Ecco un altro problema: il file di script potrebbe essere eseguito da un contesto che non è il contesto globale in alcuni ambienti di runtime.
È stato proposto di assegnare il globale a window
direttamente. Ma questo è anche dipendente dal tempo di esecuzione e non funziona nel nodo, ecc. Va a dimostrare che la gestione variabile delle variabili globale richiede una considerazione attenta e uno sforzo extra. Forse lo sistemeranno nelle future versioni di ECMS!
Per il momento, mi sento di raccomandare qualcosa di simile per sostenere una corretta gestione globale per tutti gli ambienti di run-time:
/**
* 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", {});
E 'una digitazione po' di più, ma rende il vostro futuro a prova di gestione variabile globale.
Disclaimer: Parte di questa idea mi è venuta quando ho esaminato le versioni precedenti di stacktrace.js. Suppongo che si possa usare Bower o altri strumenti per ottenere un rilevamento più affidabile e meno hackerato dell'ambiente di runtime.
Mentre questa risposta è corretta, ti suggerisco di utilizzare l'ambito della variabile JavaScript di Google per ottenere una migliore comprensione ed eventualmente evitare di fare le cose in questo modo. – aleemb
concordato. Cerco sempre di definire tutte le funzioni e le variabili in uno "spazio dei nomi" comune per evitare ingombri e conflitti. Di solito lo chiamo come abbreviazione del progetto o dell'azienda. – PatrikAkerstrand
Downvoting a questa risposta e agli altri piace perché presuppone che la variabile globale verrà creata in un ambito globale e richiede anche che la prima menzione della variabile sia nello scope globale prima di tutte le altre menzioni. – Andrew