2011-09-28 29 views
5

En algún código JS en algunos sitios veo código Javascript como este:¿Qué es este código en Javascript?

SomeName.init = (function() { 
    // some stuff 
})(); 

Es decir, esto no es un código de plugin de jQuery como este:

(function($){ 
    $.fn.myPlugin = function() { 

    // Do your awesome plugin stuff here 

    }; 
})(jQuery); 

Entonces, ¿qué es lo ? y ¿cuál es el objeto JS resultante?

+0

Yo ... no estoy seguro de lo que estás preguntando. Ambos fragmentos muestran una función que se declara y ejecuta. Más allá de eso, no parecen relacionados. –

+0

El primero es establecer los resultados de una función anónima en una variable llamada "init". Y como se ve en el segundo ejemplo, la función anónima es un patrón de diseño utilizado a menudo en la creación de PLUG-IN (o módulos) y, por lo tanto, a menudo se denomina 'Patrón de Módulo'. –

+0

[Esto es lo que encontré] (http://stackoverflow.com/questions/5101638/what-does-this-javascript-code-mean) cuando escribí el título en el cuadro de búsqueda. – user113716

Respuesta

2

El Module Pattern. Y esos dos fragmentos tienen más en común de lo que piensas.

8

Es una función anónima, que no filtra variables al alcance global al declarar variables usando var.

SomeName.init = (function() { 
    return 3.1415; 
})(); 

SomeName.init es un número (3.1415), porque () después de la declaración de función anónima ejecuta la función. No hay manera de obtener la función original, salvo que se defina dentro de la función anónima:

(function foo(){ 
    //foo refers to this function 
    too = foo; 
})();; 
//foo is undefined 
//too refers to the function, because `too` has been defined without var 
0

Cualquiera que sea la función que devuelve.

(function() { 
    //... 
})(); 

se utiliza como una forma de espacio de nombres de código, o declarar constructores de aplicación inmediata. El objeto resultante es lo que devuelve esa función autoejecutable.

El segundo fragmento no devuelve nada y no hay resulting JS object.

1
(function() { 
    // some stuff 
})() 

es una función anónima que se llama al instante. Es solo un cierre alrededor del código interno para evitar que el alcance variable se vuelva global.