He leído que al pasar objetos como parámetros en javascript (también heredado en Typescript) se pasa por referencia.
¿Podría eso causar pérdidas de memoria?
Supongamos un escenario donde:
@Component({ selector: "customer-details", templateUrl: "../html/customerDetails.template.html" }) export class CustomerDetailsComponent { customerData: Customer; constructor(private customerService: CustomerService): void {} saveCustomerInfo(): void { this.customerService.saveCustomer(this.customerData); } }¿Eso no causaría una pérdida de memoria, ya que el servicio ahora tiene una referencia guardada del atributo de un Componente que no permite que el Componente sea recolectado como basura?
En cualquier caso, ¿cuál es la mejor práctica en este tipo de llamadas? ¿Deberíamos pasar solo objetos temporales declarados dentro de las funciones a través de "let" o pasar clones creados por Object.create ()?
Muchas gracias por adelantado,
dimitris
@Component({ selector: "customer-details", templateUrl: "../html/customerDetails.template.html" }) export class CustomerDetailsComponent { customerData: Customer; constructor(private customerService: CustomerService): void {} saveCustomerInfo(): void { this.customerService.saveCustomer(this.customerData); } } En su código de ejemplo, según lo que describió en el resto de su pregunta, asumo que la llamada customerService.saveCustomer(customerData) termina colocando su parámetro (customerData) en una matriz interna.
Esto significa correctamente que el objeto customerData no será recolectado como basura porque ahora su objeto customerService tiene una referencia a él. Sin embargo, aunque el objeto customerData no se puede recolectar como basura, el resto de CustomerDetailsComponent se puede recolectar como basura sin ningún problema; el hecho de que otra persona tenga una referencia a una de sus propiedades internas significa que esa propiedad específica no se marcará para recolección de basura, pero el resto del objeto todavía está listo para la recolección de basura (suponiendo que nadie más tenga una referencia al componente en sí).
"Cuando Angular ve que un componente ya no es necesario en el DOM, lo destruirá".
Básicamente, cuando el componente no es necesario, se llama a ngDestroy().
En este caso, puede probar para ver si el componente se destruye implementando el enlace del ciclo de vida en el componente, haciendo la llamada como lo hizo anteriormente y luego moviéndose a una nueva vista donde el componente no está en el DOM.
El componente debe ser destruido muy bien.