2009-08-27 11 views

Respuesta

13

es functionaly equivalente a hacer algo como:

var myFunc = function(){ 
    var b = 3; 
    a += b; 
}; 

myFunc(); 

que tiene el paréntesis alrededor de ella (y final) de modo que la función se llama inmediatamente. Como han dicho otros, el concepto se llama función anónima.

+3

No es solo otra forma. Tu camino creará una variable 'myFunc', que puede colisionar o no con otras variables existentes. El código publicado por el OP no crea esta variable. Todavía es anónimo, por supuesto. Pero el valor está vinculado a una variable, que no está presente en el código OPs. – Svend

+2

No quise decir que los dos fueran exactamente equivalentes ... solo funcional. Producirán los mismos resultados al final. –

5

Esta es una función anónima, que se activa justo después de su creación.

4

Es una función anónima.

funciones anónimas son funciones que se declaran dinámicamente en tiempo de ejecución que no tienen que dar un nombre.

Las funciones anónimas se declaran utilizando el operador de función . Puede usar el operador de función para crear una nueva función siempre que sea válido para poner una expresión . Por ejemplo, podría declarar una nueva función como un parámetro a una llamada de función o asignar una propiedad de otro objeto.

Para la lectura adicional

Javascript anonymous functions

funciones anónimos pueden ayudar a hacer el código más conciso cuando se declara una función que sólo se utilizará en un solo lugar. En lugar de tener que declarar la función y luego usarla, puede hacer en un solo paso. Particularmente es útil para cosas como declarar eventos manejadores y asignar métodos a objetos .

Por ejemplo, si estamos creando una función de constructor, necesitaremos declarar los métodos del objeto y luego asignarlos a las propiedades del objeto para que puedan ser llamados fuera del objeto. Es posible declarar la función y después asignarlo a una variable como un paso separado de esta manera:

function Pet(name, species, hello) 
{  
      this.name = name;  
      this.species = species;  
      this.hello = hello; 

      function sayHello()  
      {  
       alert(this.hello);  
      } 

      this.sayHello = sayHello;  
     } 

Pero es un poco más conveniente y concisa para hacerlo todo como un paso:

function Pet2(name, species, hello) 
{ 
     this.name = name;  
     this.species = species;  
     this.hello = hello; 

     this.sayHello = function()  
     {  
      alert(this.hello);  
     }  
    } 
+0

No olvides la razón para poner una función anónima dentro de la paranthesis, aunque ... probablemente demasiado tarde, ya que ha sido bastante bien cubierto por ahora ... – peirix

2

Lo que usted escribió es una función anónima llamada inmediatamente. El motivo para hacerlo es el uso de variables privadas. Si en lugar de su código hubiera:

var b = 3; 
a += b; 

b será la variable global. Entonces, si necesita una variable privada de código global, esa es la forma de hacerlo.

1

Esta es la función anónima que se ejecuta en su lugar.El mejor uso de esto es establecer algunas configuraciones de contexto o de entorno o tener algún efecto secundario en la carga.

Esto es muy utilizado por Ajax Toolkits como JQuery, Dojo, etc. para realizar magia de tiempo de carga y solucionar muchos caprichos y deficiencias del navegador.

1

Es una función anónima, que se llama directamente después de la creación, y luego se descarta.

Está dentro de un paréntesis para evitar un error de sintaxis. Sin los paréntesis, la palabra clave function debe ir seguida de un identificador.

También puede hacer como esto para poner la función de una variable, y luego llamarlo:

var x = function() { 
    var b = 3; 
    a += b; 
} 
x(); 

en cuenta que los paréntesis no son necesarios cuando la palabra clave function no es en primer lugar.

1

Las funciones en javascript son objetos y se pueden usar también como objetos. Entonces, por ejemplo, puede hacer esto:

var a = function() {alert("done");}; 
a(); 

Esto se utiliza comúnmente en varias funciones donde tiene que pasar algo de lógica en su interior. Por ejemplo, la función "tipo" para matrices espera un objeto de función que se pasa en el interior para determinar cómo ordenar la matriz:

var a = [{id: 15, name: 'test'}, 
     {id: 11, name: 'asd'}, 
     {id: 88, name: 'qweqwe'}]; 
a.sort(function(a,b) { 
    if (a.id > b.id) return 1; //Put a after b 
    if (a.id < b.id) return -1; //Put a before b 
    if (a.id == b.id) return 0; //Don't make no changes 
}); 

El método 'sort' invoca entonces la función proporcionada con todo tipo de elementos de la matriz para ordenar eso.

Lo que hace su ejemplo: crea un objeto de función y lo ejecuta al instante.

1

La respuesta de Justin lo explica bastante bien, pero pensé que solo agregaría que el primer conjunto de paréntesis (el de apertura anterior al function) es completamente innecesario en lo que respecta a la ejecución del programa. Para la legibilidad, sin embargo, ¡es muy importante! Cuando veo esto:

(function() { 

Yo sé que esta función se llama de inmediato, sin tener que desplazarse hacia abajo para encontrar el final del bloque. Esto es importante porque a veces desea asignar el valor de retorno de la función a una variable y, a veces, desea asignar la función a una variable. Ver:

var x = (function() { 
    return 4; 
})(); 

var y = function() { 
    return 4; 
}; 

// typeof x == integer (4) 
// typeof y == function 
Cuestiones relacionadas