Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

186
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda