Paso por valor

Clase 8 de 80Curso de JavaScript Desde Cero

Contenido del curso

Primeros Pasos

Funciones y This

Resumen

¿Qué es el paso por valor y el paso por referencia en JavaScript?

JavaScript es un lenguaje versátil y profundo que requiere comprender conceptos únicos como el paso por valor y el paso por referencia. Estos conceptos son centrales para manejar correctamente los tipos de datos y su comportamiento en memoria. Basándonos en una clase práctica, exploraremos estas nociones aplicadas a variables primitivas y complejas.

¿Cómo se visualizan los tipos de datos primitivos en memoria?

Los tipos de datos primitivos en JavaScript son inmutables y se pasan por valor, lo que significa que, al asignar una variable a otra, se copia el valor sin afectar al original. Ejemplo:

let x = 1; let y = 'hola'; let z = null; let a = x; let b = y; let c = z; console.log(x, y, z, a, b, c); // Salida: 1, "hola", null, 1, "hola", null

En memoria, al cambiar los valores de x, y o z, a, b y c no se ven afectados, pues los datos primitivos hacen una copia exacta. Esto exalta el papel fundamental de cómo los datos primitivos se comportan en nuestras aplicaciones.

¿Qué ocurre con los tipos de datos complejos y el paso por referencia?

Los tipos de datos complejos, como los objetos y arrays, son mutables y se pasan por referencia. En lugar de copiar el valor, se copia una referencia que apunta a una ubicación de memoria. Aquí un ejemplo práctico con arrays:

let frutas = ['manzana']; frutas.push('pera'); console.log(frutas); // Salida: ["manzana", "pera"]

En este caso, al modificar el array frutas, lo que se actualiza es la referencia en memoria. Esto implica que, cualquier cambio hecho sobre esa referencia, se reflejará en el objeto original, mostrando claramente el comportamiento mutable de las estructuras de datos complejas.

¿Qué ocurre al asignar variables que contienen arrays?

Analizar cómo múltiples variables pueden apuntar al mismo objeto en memoria puede revelar la naturaleza del paso por referencia. Considera el siguiente código:

let panes = ['🥖']; let copiaDePanes = panes; panes.push('🍞'); console.log(panes, copiaDePanes); // Salida: ['🥖', '🍞'], ['🥖', '🍞']

Ambas, panes y copiaDePanes, apuntan a la misma dirección de memoria. Cualquier modificación en el array afectará a ambas variables, manifestando así un comportamiento compartido que ilustra el concepto de referencias de memoria comunes.

¿Cuál es la diferencia clave entre los pasos por valor y por referencia?

En resumen, la diferencia reside en cómo se manejan las copias:

  • Paso por valor: se copia el valor literal.

  • Paso por referencia: se copia una dirección de memoria.

Este conocimiento es crucial para evitar errores comunes al manejar datos y diseñar soluciones eficientes en JavaScript. Aprender y dominar estas prácticas fomenta un uso efectivo de la memoria y un mayor control sobre cómo interactúan los datos en nuestras aplicaciones.