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

266
Views
Entorno léxico y bind()

Al crear una función con bind(), ¿también se crea un entorno léxico? Mi código funciona como se esperaba, estoy haciendo una función Parcialmente aplicada con un objeto y quiero confirmar si la referencia nunca se pierde cuando usamos curry

 let literal = { nombre: 'Daniel' }; function parcial(unObjeto, numero) { console.log(unObjeto); } let vinculada = parcial.bind(null, literal); vinculada(); // {nombre: 'Daniel'} literal.nuevapropiedad = 'nuevo valor'; vinculada(); // {nombre: 'Daniel', nuevapropiedad: 'nuevo valor'}

Veo que si modifico el objeto "literal" más adelante en el código, la función vinculada lee ese objeto "actualizado" .

Que yo sepa, esto tiene lógica porque bind() crea un entorno léxico que se cierra en este caso en "literal" como si lo hiciera con el primer argumento (en este caso no quiero usar el primer argumento) y nunca perderá la referencia.

Básicamente, quiero mantener la referencia a "literal" en mi función para no tener que preocuparme por devolverla cada vez que cambio "literal" .

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

0

El entorno léxico tiene que ver con el alcance . Y las palabras que se usan para describir el alcance incluyen cosas como close over , global , etc.

Sin embargo, .bind() no funciona con alcance. En su lugar, funciona con enlaces . La vinculación es un concepto ortogonal al alcance. Donde el alcance define qué variables son accesibles en qué parte del código, el enlace define en qué objetos operan los métodos.

No son el mismo concepto (aunque los lenguajes como Java confunden el problema porque en realidad no tiene un concepto real de múltiples ámbitos , sino que llama "alcance" vinculante).

Este es el alcance :

 var a = 1; var b = 2; function foo (c) { var d = 3; var b = 4; a = 5; console.log(a, b, c, d); } foo(10); // logs 5, 4, 10, 3 console.log(a, b); // logs 5, 2 console.log(c, d); // throws error because c and d don't exist

Esto es vinculante :

 var x = {} x.hello = 1; x.sayHello = function () { console.log(this.hello); } x.sayHello(); // logs 1

Los argumentos de función, variables globales, variables dentro de funciones, etc. son manejados por el mecanismo de alcance que, en el caso de JavaScript, crea cierres. No tienen nada que ver con la unión.

El valor de this lo maneja el mecanismo de vinculación (herencia, .bind() , etc.) y no tiene nada que ver con el alcance.

Básicamente .bind() no afecta el entorno léxico y el entorno léxico no afecta los enlaces (aunque se podría argumentar que las funciones de flecha son un tipo de enlace léxico).

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!