Solo me preguntaba si el recolector de basura se encarga de una matriz devuelta por la función. ¿Esta función causará pérdidas de memoria si se llama muchas veces?
1. myFun = () => { 2. let data = [] 3. for (let i=1; i<5; i++){ 4. data.push(id: i, name: 'temp') 5. } 6. return data 7. } 8. 9. let myData1 = myFun() 10. let myData2 = myFun() 11. let myData3 = myFun()por lo que crea tres nuevas matrices. Pero, ¿cuál es el definido en la fila #2?
Pero, ¿cuál es el definido en la fila #2?
Esa es la misma matriz exacta que se devuelve. No está creando seis arreglos en total (tres adentro, tres afuera), está creando tres arreglos en total (tres adentro, que luego se devuelven al exterior).
Por lo tanto, esa matriz no se recolectará como basura siempre que la expresión devuelta siga siendo referenciable. Si myData1 , myData2 , myData3 permanecen referenciables para siempre, ninguna de las matrices se recolectará como basura. Si se vuelven no referenciables y nada puede continuar usándolos, entonces se recolectarán basura, por ejemplo, si lo hizo
(() => { myFun = () => { let data = [] for (let i = 1; i < 5; i++) { data.push(id: i, name: 'temp') } return data } let myData1 = myFun() let myData2 = myFun() let myData3 = myFun() })(); Dado que myData1 , etc. no se vuelven a usar, y dado que el alcance en el que se declaran termina, todas las matrices se recolectarán en breve.