Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

332
Vistas
JavaScript: ¿Cuál es la diferencia entre la función f(){} y la constante f =(función(){...})()?

Aquí hay dos formas de escribir una función que incluye un IIFE:

 function f() { let count=0; return function() { return ++count; } } const g = (function() { let count=0; return function() { return ++count; } })();

f () devuelve function () { return ++count; }

Cuando g() se ejecuta varias veces, devuelve 1, 2, 3... que es la intención.

Ahora otro ejemplo:

 function f() { return "This is f()"; } const g = (function() { return "This is g()"; })();

En este caso, f() devuelve "Esto es f()" y g() es un error de script.

He hecho mucha codificación en lenguajes C-ish, pero soy nuevo en JavaScript. ¿Qué me estoy perdiendo?

En respuesta a la primera respuesta, aquí hay un fragmento de código ejecutable. Si function f(){...} fuera lo mismo que const f = (function () {...})() , esperaría que ambos se ejecutaran. Ellos no.

 function f() { return "This is f()!"; } console.log(f()); const h = f; console.log(h()); const g = (function() { return "This is g()"; })(); console.log(g());

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Las funciones en JavaScript son objetos de primera clase , lo que significa que puede tratarlas como cualquier otro objeto en JavaScript.

function f (){} es una definición de función regular, que también puede escribir como

 let f = function(){}

(function{})() es básicamente lo mismo que

 let f = function () {} f = f() // You reassign f to be the return value from the function that f was assigned to

Tu fondo de caja const g = (function() {return "This is g()";})(); Se puede escribir como:

 let g = function() { return "This is g()" } g = g() // You are reassigning g to be "This is g()" // Trying to call g again is like calling a string // and it should return an error saying that g is not a function g()

Actualizar

La diferencia en su ejemplo extendido es que f es una función que devuelve una función (siempre), mientras que g se asigna inmediatamente a la "función regular" interna y devuelve números.

 function f() { let count = 0; // --- Will always return this, a function ---- return function () { return ++count; } // -------------------------------------------- } const g = (function () { let count = 0; return function () { return ++count; } })() // <--- Here you call the (function () {}) immediately, thus you assign g to the inner returned function console.log(f); console.log(f()); // returns a function console.log(g); console.log(g()); // returns a number console.log(g()); console.log(g()); console.log(g());

Para hacer f equivalente a g tienes que hacer esto:

 function f() { let count = 0; return function () { return ++count; } } f = f() // Here
about 4 years ago · Juan Pablo Isaza Denunciar

0

El comportamiento del siguiente recorte aclara mi pregunta...

Y creo que veo la respuesta. En el primer caso, f() no hace nada hasta que se llama. Y cuando se llama, devuelve la cadena.

En el segundo caso, (function(){})() se ejecuta inmediatamente y devuelve la función misma.

Como su nombre lo dice, ejecución inmediata. Gracias por ayudarme a hacer la pregunta correcta.

 function f() { let count=0; return function() { return ++count; } } const g = (function() { let count=0; return function() { return ++count; } })(); console.log(f); console.log(f()); console.log(g); console.log(g()); console.log(g()); console.log(g()); console.log(g());

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda