Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

216
Views
Cierres de JavaScript

Tengo una pregunta sobre los cierres en JavaScript. Lo que me preguntaba es que todas las funciones que usan variables de alcance externo se cierran automáticamente.

Eche un vistazo al ejemplo de código, ¿es el cierre?

 const x = 2; function foo() { console.log(x); }

También he leído el hilo stackoverflow que contiene dos declaraciones inconsistentes. La respuesta "no" vincula a wikipedia y establece que:

Por último, un cierre solo se distingue de una función con variables libres cuando está fuera del alcance de las variables no locales; de lo contrario, el entorno de definición y el entorno de ejecución coinciden y no hay nada que los distinga (la vinculación estática y dinámica no se pueden distinguir porque los nombres se resuelven en los mismos valores).

Pero hay puntos aparentemente válidos en los comentarios del usuario TJ Crowder.

Esto puede o no ser cierto para otros lenguajes, pero en JavaScript, todas las funciones son cierres. Es intrínseco a ellos, en JavaScript. No hay nada especial en los cierres sobre otros contextos que los distinga de las funciones que solo cierran sobre el contexto global. Ver §9.2.5 - FunctionCreate y sus usos para más detalles.

Todos son cierres (en JS) porque el mecanismo mediante el cual funcionan las variables globales en JavaScript es exactamente el mismo mecanismo mediante el cual funciona el cierre sobre variables de otros contextos. No hay distinción, en absoluto. Esta distinción semántica de "funciones con variables libres" frente a "cierres" puede o no ser válida para lenguajes que no conozco tan bien como JavaScript, y como dije en mi respuesta, generalmente no los llamamos cierres a menos que usted Los estamos usando para acceder a algo no global. Pero eso no significa que no sean cierres. :-)

Volviendo al primer fragmento de código, básicamente "foo" tendría que devolver la función que luego registra la consola. ¿O aún no sería un cierre y la variable "x" debería haberse movido al cuerpo de foo?

¿Como esto?

 function foo() { const x = 2; return () => console.log(x); }

Estoy confundido.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Le sugiero, si no lo hizo, que consulte los documentos de MDN Docs que son bastante exhaustivos sobre los cierres (y con muchos ejemplos).

En el primer párrafo de la página vinculada, puede encontrar una respuesta a su pregunta:

En JavaScript, los cierres se crean cada vez que se crea una función , en el momento de la creación de la función.

about 4 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 Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!