self
es una sólo lectura propiedad que puede ser más flexible que, a veces utilizado en favor de la window
directamente. Esto se debe a que la referencia self
cambia según el contexto operativo (a diferencia de window.self
, que solo existe si existe window
). También es ideal para las comparaciones, como otros han mencionado.
Por ejemplo, si usa self
dentro de un Trabajador web (que vive en su propio hilo de fondo), self
realmente hará referencia a WorkerGlobalScope.self
. Sin embargo, si usa self
en un contexto de navegador normal, self
simplemente devolverá una referencia a Window.self
(la que tiene document
, addEventListener()
, y todas las otras cosas que está acostumbrado a ver).
TL; DR mientras que el .self
en window.self
no existirá si no existe window
, utilizando self
en su propio punto de Window.self
voluntad en un contexto de ventana/navegador tradicional o WorkerGlobalScope.self
en un contexto trabajador web.
Como de costumbre, MDN tiene una gran descripción sobre este tema in their JavaScript docs. :)
Nota al margen: El uso de self
aquí no debe ser confundido con el patrón común de JS declarar una variable local: var self = this
para mantener una referencia a un contexto después de la conexión.
Puede leer más al respecto aquí: Getting Out of Binding Situations in JavaScript.
Al usar Web Workers y la ventana no son lo mismo. Ver [http://stackoverflow.com/questions/11219775/global-variable-in-web-worker][1] [1]: http://stackoverflow.com/questions/11219775/global -variable-in-web-worker – user1872904