Como se mencionó anteriormente, existen problemas con el uso del alcance más alto en el archivo de script. Aquí hay otro problema: el archivo de script se puede ejecutar desde un contexto que no es el contexto global en algún entorno de tiempo de ejecución.
Se ha propuesto asignar el global a window
directamente. Pero eso también es en tiempo de ejecución dependiente de y no funciona en Node, etc. Muestra que la administración de variable global portátil necesita una consideración cuidadosa y un esfuerzo extra. ¡Quizás lo arreglen en futuras versiones de ECMS!
Por ahora, yo recomendaría algo como esto para apoyar la gestión global adecuada para todos los entornos de tiempo de ejecución:
/**
* 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 una tipificación poco más, pero hace que su gestión variable de prueba del futuro global.
Descargo de responsabilidad: Parte de esta idea se me ocurrió al mirar versiones anteriores de stacktrace.js. Creo que también se puede usar Bower u otras herramientas para obtener una detección más confiable y menos hackosa del entorno de tiempo de ejecución.
Si bien esta respuesta es correcta, le recomiendo que consulte el alcance variable de Google Javascript para obtener una mejor comprensión y posiblemente evitar hacer las cosas de esta manera. – aleemb
de acuerdo. Siempre trato de delimitar todas las funciones y variables en un "espacio de nombres" común para evitar el desorden y los conflictos. Normalmente lo nombro como una abreviación del proyecto o empresa. – PatrikAkerstrand
Downvoting this answer y otros similares porque asume que la variable global va a crearse en un ámbito global, y también requiere que la primera mención de la variable esté en el ámbito global antes que todas las demás menciones. – Andrew