Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

120
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!