también, además de la respuesta de la @ de Daniel, pasando this
a la función es un patrón común tener una referencia al objeto global, por ejemplo:
(function(window){
})(this);
En el navegador de secuencias de comandos del objeto global tiene una propiedad denominada window
que se refiere al objeto global en sí, en otros entornos no existe la propiedad window
.
También, otra cosa que se puede hacer es especificar un argumento llamado undefined
, porque la propiedad undefined
no se describe en la tercera ECMAScript. Edición estándar (no hay ninguna garantía de que exista o no), y en algunas implementaciones la propiedad es mutable, por ejemplo:
(function(window, undefined){
})(this);
En el ejemplo anterior, tenemos dos identificadores locales (que son un poco más rápido para resolver), window
y undefined
, solamente se hace pasar la primera (this
, que siempre se refiere al objeto global en código Global (código que está fuera de cualquier función)), y el segundo, contendrá el valor primitivo undefined
, porque no le estamos dando ningún valor.
Ese patrón es utilizado por algunas bibliotecas como jQuery.
Creo que 'encapsular' es un término engañoso aquí y debe cambiarse a 'alcance' con respecto a los conceptos de OOP –