Como convención estilo que me gusta ser explícito cuando estoy acceder a las variables en el ámbito global, prefiriendo¿Debo usar auto o ventana para hacer referencia al alcance global?
window.example = "Hello";
window.alert(window.example);
al menos detallado
example = "Hello";
alert(example);
ahora tengo un módulo que puede ser utilizado directamente desde el navegador o, si están disponibles, desde un trabajador web. En los trabajadores web, el objeto global se llama self
, mientras que en el navegador se llama window
.
El objeto window
tiene una propiedad de auto, por lo self.example = "Hello"
funcionaría en ambos contextos, siempre y cuando nadie redeclares self
(como sucede con frecuencia: var self = this).
¿Cuál es la mejor convención para ir?
- Uso
self
y la esperanza de que nadie declara un conflictoself
. - Si se define
window
, usewindow
, de lo contrario useself
. - ¿Algo más?
Habiéndolo pensado, me inclino a ir con el segundo.
Sorprendentemente, esto parece arrojar un error de referencia cuando se utiliza en el trabajador web. Chrome dice: "ReferenceError: No se puede encontrar la variable: ventana". Debo mencionar que estoy usando requireJS para cargar este módulo de mi trabajador, así que supongo que podría ser la fuente de alguna rareza. – RichardTowers
disculpas, olvidé el manejo severo de una variable que no existe. arreglado. – matt3141
'global = typeof ventana! ==" indefinido "&& ventana! == nulo? window: self; 'también parece funcionar sin error. Sin embargo, me gusta la respuesta de @Pointy. – RichardTowers