2008-10-09 14 views

Respuesta

40

Crea una función anónima, cierre y todo, y el final() le dice que se ejecute.

Es básicamente lo mismo que:

function name(){...} 
name(); 

Así que, básicamente, no hay nada especial en este código, sólo un 'atajo' a la creación de un método y lo alega, sin tener que nombrarlo.

Esto también implica que la función es una única, o una función interna en un objeto, y es más útil cuando se necesitan las características de un cierre.

+3

Para ser más explícito: esto evita la contaminación del espacio de nombres global - ninguna función con nombre se mantendrá después de que se ejecuta este código. Esa es una de las principales razones para hacer esto, sin importar el cierre. –

2

Es una función anónima autoejecutable. El() al final está llamando a la función.

Un buen libro (que he leído) que explica algunos usos de estos tipos de sintaxis en Javascript es Object Oriented Javascript.

0

Las cosas en el primer conjunto de corchetes se evalúan como una función. El segundo conjunto de corchetes ejecuta esta función. Por lo tanto, si tiene algo que desea ejecutar automágicamente, entonces cómo lo cargaría y lo ejecutaría.

2

Este uso es básicamente equivalente a un bloque interno en C. Impide que las variables definidas dentro de sean visibles fuera del bloque. Por lo tanto, es una forma práctica de construir una de las clases con objetos privados. No olvides return this; si lo usas para construir un objeto.

var Myobject=(function(){ 
    var privatevalue=0; 
    function privatefunction() 
    { 
    } 
    this.publicvalue=1; 
    this.publicfunction=function() 
    { 
     privatevalue=1; //no worries about the execution context 
    } 
return this;})(); //I tend to forget returning the instance 
        //if I don't write like this 
4

Se está llamando a una función anónima.

El objetivo de esto es crear un nuevo ámbito desde el que las variables locales no se desvanezcan. Por ejemplo:

var test = 1; 
(function() { 
    var test = 2; 
})(); 
test == 1 // true 

Una nota importante acerca de esta sintaxis es que usted debe conseguir en el hábito de la terminación de sentencias con un punto y coma, si no lo hace ya. Esto se debe a que Javascript permite líneas de alimentación entre un nombre de función y sus paréntesis cuando lo llamas.

El siguiente fragmento de código se producirá un error:

var aVariable = 1 
var myVariable = aVariable 

(function() {/*...*/})() 

Esto es lo que en realidad está haciendo:

var aVariable = 1; 
var myVariable = aVariable(function() {/*...*/}) 
myVariable(); 

Otra forma de crear un nuevo ámbito de bloque es utilizar la siguiente sintaxis:

new function() {/*...*/} 

La diferencia es que la técnica anterior no afecta donde la palabra clave "th es "apunta a, mientras que el segundo sí.

Javascript 1.8 también tiene una declaración de let que logra lo mismo, pero no hace falta decir que no es compatible con la mayoría de los navegadores.

Cuestiones relacionadas