¿Cuál es el término para una función anónima de JavaScript que se llama de inmediato?

29

Estoy escribiendo una guía de estilo de JavaScript para mi equipo, para que podamos organizar y aportar nuestros documentos más fácilmente. Pero he golpeado un pequeño bulto que es donde se aplica mi pregunta ...

¿Qué se supone que debo llamar a una función anónima de JavaScript que se llama de inmediato? Sé que podría simplemente llamarlo una "función anónima", pero me gustaría enfatizar el hecho de que se llama de inmediato.

Aquí hay un ejemplo:

var MyVariable = (function(data){
  return "another value"
})("some value"); 

console.log(MyVariable);
// "another value"
silencioso
fuente
1
Tenga en cuenta que a menudo verá esta construcción (inexacta) referida como una "función de auto-llamada"
AakashM

Respuestas:

39

Ya tienen un término para eso en el mundo Javascript. Se llaman expresiones de función invocadas inmediatamente (IIFE) .

Lo que es

Las funciones IIFE no tienen nombre. En cambio, se ejecutan una vez cuando el intérprete se encuentra con ellos:

var area = function() {
    var width = 3;
    var height = 2;
    return width * height;
}();

Los paréntesis finales después de la llave de cierre del bloque de código le dicen al intérprete que llame a la expresión de la función inmediatamente.

Si escribe una declaración de función , debe agregar operadores de agrupación , o paréntesis que rodean la función, para decirle al intérprete que trate la función como una expresión que se puede invocar de inmediato:

var area;
(function() {
    var width = 3;
    var height = 2;
    area = width * height;
}());


Cuando se usan

Los IIFE se utilizan para el código que solo necesita ejecutarse una vez dentro de una tarea, en lugar de ser llamado repetidamente.

  1. Como argumento cuando se llama a una función (para calcular valores, etc.)
  2. Para asignar el valor de una propiedad a un objeto.
  3. En caso de controladores y oyentes.
  4. Para evitar conflictos entre dos scripts que podrían usar los mismos nombres de variables. Se pueden usar como envoltorios para colocar código en otro script donde no está seguro de si los nombres de las variables pueden ser los mismos.
Lawrence Aiello
fuente
Un punto crítico: en su ejemplo de uso var area = ..., no necesita los paréntesis de "ajuste" en la función, porque ya es una expresión de función en virtud de estar en el lado derecho de la función =. Los paréntesis de ajuste solo son necesarios cuando la función se escribe como una declaración de función (es decir, sin el encabezado var area = ...).
Eric King
@EricKing, ¿lo hice bien?
Lawrence Aiello
Sería bueno poder llamar más informalmente a estas 'funciones expresas'
colador el
@LawrenceAiello Agregué una edición para mostrar lo que quería decir. Espero que todavía funcione para ti.
Eric King
Como una pregunta relacionada, ¿hay alguna razón para pasar un argumento al IIFE como lo muestra la pregunta? Solo he visto esto como lo demuestra, sin ningún argumento (ya que cualquier argumento puede ser una variable local).
Kat