2011-03-10 20 views
5

Duplicar posible:
What is the purpose of wrapping whole Javascript files in anonymous functions like “(function(){ … })()”?Notación de JavaScript: (function() {...})();

Hola a todos,

he visto varios archivos JavaScript utilizando esta notación:

inicio del archivo JavaScript:

(function() { 
// All functions go here. 
// Can someone say what the wrapping nameless function is used for? 
})(); 

También con la biblioteca de prototipo, esto parece posible:

function $() { 
// Prototype $-wrapping function. 
} 

Por favor alguien puede explicar los dos fragmentos de código anteriores, sus usos y sus diferencias? Algunas palabras clave que me ayudarían a encontrar más información sobre esta notación/técnica (cómo se llama) también serían útiles, así que puedo ejecutar una búsqueda en Google ... :)

¡Gracias!

+1

Posible duplicado de http://stackoverflow.com/questions/2421911 – Gumbo

+0

Definitivamente un duplicado de arriba, y creo que una MUCHA MEJOR explicación que cualquiera de las siguientes. – necromancer

+0

Ese también contiene información interesante, gracias Gumbo. ¡También leeré la respuesta en ese otro hilo! Realicé una búsqueda antes de publicar esta, pero no estaba exactamente seguro de qué usar como palabras clave para encontrar una pregunta similar. :) – Sander

Respuesta

6

En su primer ejemplo, las personas rodean su código en una función anónima por motivos de alcance, para evitar el desorden global del espacio de nombres. Esa sintaxis de paréntesis extraña se usa para definir y ejecutar la función, todo en un solo paso; el () al final tiene el significado de ejecutando la función en sí.

De modo que dentro de esa función anónima podría definir function apple(){} y solo sería accesible dentro de esa función anónima. Esto es bueno si está creando una biblioteca y quiere que solo ciertas cosas atemperen su espacio de nombres global.

Su segundo ejemplo es simplemente una función simple llamada $. A muchas bibliotecas les gusta usar este nombre porque es breve y conciso, y como necesita escribirlo cada vez que quiera hacer referencia al espacio de nombres de las bibliotecas, cuanto más corto, mejor.

3

Busqué "función de JavaScript envoltura" y el primer golpe estaba this, que dice:

This method doesn't add any new symbols to the global or LIB spaces. 

No entiendo la segunda parte de la pregunta: function $() { ... } no es una función "sin nombre" : tiene el nombre $! Si le gustan las funciones llamadas $, es la forma más directa que conozco de hacer tal cosa.

+0

Pasó por alto que de hecho no es una función sin nombre, mi mal :) Editado en mi pregunta. – Sander

3

Una función annonymous se define

function() { 
} 

y luego llama inmediatamente

() 

El extra() que encierra la función es forzar al intérprete para tratar la función como una expresión. Javascript trata cualquier declaración que comience con la palabra clave function como una declaración, por lo que no podría llamarse inmediatamente.

El propósito es evitar contaminar el espacio de nombres global. Todas las variables definidas en la función serán locales para la función.

Google para patrón de módulo.

1

primera se llama función inmediata. Puede leer más sobre este patrón de función here.

Cuestiones relacionadas