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

195
Visualizações
Alcance de Javascript en variables y funciones

Me dieron este fragmento para depurar en una de mis entrevistas.

 var module = (function sumModule(){ var a = 0; var b = 0; const init = (a,b) =>{ a = a; b = b; } function sum() { return a+b; } return { sum: sum, init } })(); module.init(1,2); console.log(module.sum())

El valor que se devuelve es 0 (0+0), la asignación de a y b en func init no sobrescribió la var a global y la var b . ¿Por qué es esto así, alguien puede explicar por favor?

NOTA: Me dijeron que lo arreglara sin cambiar el nombre de los parámetros de función (a,b) .

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

En lugar de cambiar el nombre de los parámetros, también puede hacer referencia a las variables globales a través de su espacio de nombres como lo hace con la función init .

*O simplemente cambie el nombre de las variables globales, si eso está permitido

 var module = (function sumModule(){ var a = 0; var b = 0; const init = (a, b) => { module.a = a; module.b = b; } function sum() { return module.a + module.b; } return { sum: sum, init, } })(); module.init(1, 2); console.log(module.sum())

about 4 years ago · Juan Pablo Isaza Relatório

0

Porque a y b en las asignaciones de la función init() se refieren a sus parámetros, no a los a y b externos. Entonces, esas asignaciones no afectan los valores de a y b externos.

about 4 years ago · Juan Pablo Isaza Relatório

0

Respuesta modificada de @reyno. Su ejemplo simplemente parchea a & b en el objeto del module después de la llamada .init . Por lo tanto, estas variables son públicas y ya no son privadas.

Con esto obtienes el mismo resultado, pero manteniendo las variables a & b privadas.

Para lograr esto, use un objeto de espacio de nombres privado, como hice con private .

 var module = (function sumModule(){ var private = { a: 0, b: 0 } const init = (a, b) => { private.a = a; private.b = b; } function sum() { return private.a + private.b; } return { sum: sum, init, } })(); console.log(module) // no a or b property module.init(1, 2); console.log(module.sum()) console.log(module) // still no a or b property

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