Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

267
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda