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

121
Vistas
¿Fuga de memoria potencial con el operador de propagación?

Me pregunto si el siguiente fragmento de código es una posible pérdida de memoria.

 let arrOfObj = [ { a: 0, b: 0 } ] const copy = [ ...arrOfObj ] copy[0].a = 5; console.log(arrOfObj) // [ { a: 5, b: 0 } ] console.log(copy) // [ { a: 5, b: 0 } ] arrOfObj = [] console.log(arrOfObj) // [] console.log(copy) // [ { a: 5, b: 0 } ]

El operador de propagación solo hará una copia superficial, por lo que el objeto dentro de la matriz sería una referencia. Pero, ¿de dónde obtuvo javascript los valores en el último registro? ¿Se recolectarán basura cuando vacíe la matriz?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

No, no hay pérdida de memoria. Desglosando los pasos para una mejor explicación:

  1. const copy = [...arrOfObj] : asigna espacio en el montón de memoria y lo asigna a la variable de copy . Dado que spread realiza una copia superficial, la referencia del objeto sigue siendo la misma dentro de la matriz.
  2. copy[0].a = 5; : actualiza el valor del objeto dentro de la matriz de copy . Dado que la referencia al objeto es la misma tanto para copy como para arrOfObj , se refleja en ambas matrices.
  3. arrOfObj = [] : asigna espacio en el montón de memoria para [] y lo asigna a la variable arrOfObj . Esto no implica que la copy pierda su referencia a la matriz que creó anteriormente. la copy aún apunta a la referencia de memoria más antigua. Por lo tanto, copy imprime el objeto que contiene la matriz anterior y arrOfObj imprime una matriz vacía.

Para profundizar más en esto, incluso si hace lo siguiente, la copy aún apuntaría a una referencia de memoria más antigua:

 let arrOfObj = [ { a: 0, b: 0 } ] // instead of spread, assign it directly const copy = arrOfObj; copy[0].a = 5; console.log(arrOfObj) // [ { a: 5, b: 0 } ] console.log(copy) // [ { a: 5, b: 0 } ] // assign empty array to 'arrOfObj' arrOfObj = [] console.log(arrOfObj) // [] console.log(copy) // [ { a: 5, b: 0 } ] => still prints the array

Además, el valor anterior de arrOfObj "puede" recolectar basura (depende de las optimizaciones del motor JS)

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