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

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

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 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