Paso por referencia

Clase 9 de 80Curso de JavaScript Desde Cero

Contenido del curso

Primeros Pasos

Funciones y This

Resumen

¿Qué es el paso por referencia en JavaScript?

En JavaScript, entender cómo funcionan las referencias es clave para manejar objetos y arrays eficazmente. El paso por referencia se refiere a que, cuando asignamos un objeto a una variable, estamos apuntando a la misma ubicación en memoria. Esto significa que las modificaciones en cualquiera de las variables afectan el mismo objeto en memoria.

¿Cómo afecta esto a los objetos?

Cuando creamos un objeto en JavaScript y lo asignamos a una variable, lo que realmente estamos haciendo es crear una referencia a ese objeto en la memoria. Por ejemplo, si declaramos:

let frutas = { naranja: "🍊" }; let vegetales = frutas;

Ambas variables frutas y vegetales apuntan al mismo objeto. Cualquier cambio que hagamos a través de una de las variables se verá reflejado en la otra. Si hacemos:

vegetales.naranja = "🥦"; console.log(frutas);

Veremos que el valor de frutas.naranja también cambia a "🥦", debido a que ambas variables comparten la misma referencia.

¿Qué sucede al modificar objetos?

Al modificar los objetos, ya sea añadiendo nuevas propiedades o cambiando las existentes, la referencia sigue apuntando al mismo lugar en la memoria. Por ejemplo, si tenemos un objeto ropa:

let ropa = { blusa: "👚" }; ropa.pantalón = "👖"; console.log(ropa);

El objeto ropa ahora tiene ambas propiedades: blusa y pantalón. Cada actualización o adición a las propiedades de un objeto no crea un nuevo objeto sino que modifica el existente.

¿Cómo se gestiona la memoria en JavaScript?

JavaScript maneja la memoria de manera automatizada y existe un concepto crucial llamado Garbage Collection o recolección de basura. Este proceso se encarga de liberar la memoria de referencias que ya no se están utilizando, eficientizando los recursos.

¿Por qué es importante la recolección de basura?

Imagina que has creado una referencia a un objeto pero luego creas otra referencia y pasas a usar sólo la nueva. La primera referencia se queda sin uso. JavaScript, mediante la recolección de basura, identifica estas situaciones y las elimina para hacer un uso eficiente de la memoria. Esto es esencial, sobre todo en aplicaciones grandes, para prevenir el agotamiento de recursos y mejorar la performance.

¿Qué pasa cuando el garbage collector actúa?

En esencia, JavaScript detecta cuando una referencia a un objeto ya no es accesible desde el código y la elimina de la memoria. Siguiendo el ejemplo previo:

let ropa = { blusa: "👚" }; ropa = { blusa: "👚", pantalón: "👖" };

La primera referencia a ropa quedaría inaccesible una vez redefinimos ropa. Así, el recolector de basura puede liberar la memoria ocupada por la referencia previa.

Consejos para manejar las referencias en JavaScript

  • Evita modificar objetos directamente: Si deseas pasar un objeto a una función y asegurar que no sea modificado, es mejor pasar una copia del objeto.

  • Usa Object.assign o el operador de propagación: Esto te permitirá crear copias superficial de los objetos que eviten la modificación directa de los originales.

  • Sé consciente del estado de tu aplicación: Tener un entendimiento claro de cuándo y dónde se necesita una referencia o un nuevo objeto te ayudará a evitar comportamientos inesperados.

El dominio de estos conceptos te dotará de herramientas poderosas para el manejo eficiente de la memoria y el diseño de aplicaciones robustas. ¡Sigue practicando y explorando!