• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

268
Views
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 3 years ago · Juan Pablo Isaza
2 answers
Answer question

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 3 years ago · Juan Pablo Isaza Report

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 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error