JavaScript Fundamentals

Paso por Valor y Paso por Referencia en JavaScript

Spread the love

El manejo de paso de parámetros en JavaScript es una fuente frecuente de confusión, a menudo debatida como paso por referencia o paso por valor. La realidad es más matizada: JavaScript emplea un mecanismo que combina aspectos de ambos, dependiendo completamente del tipo de datos involucrado.

Tabla de Contenido

Entendiendo el Paso por Valor con Primitivos

Los tipos de datos primitivos de JavaScript —number, string, boolean, null, undefined, bigint, y symbol— operan usando paso por valor. Cuando un primitivo se pasa a una función, se crea una copia de su valor y se pasa. Las modificaciones dentro de la función afectan solo a esta copia, dejando la variable original intacta.


let x = 10;

function changeValue(y) {
  y = 20;
}

changeValue(x);
console.log(x); // Salida: 10

En este ejemplo, cambiar y dentro de changeValue no altera la x original.

Comprendiendo el Paso por Referencia con Objetos

Los objetos en JavaScript (incluyendo arrays y funciones) se comportan de manera diferente. Cuando un objeto se pasa a una función, lo que se pasa es una referencia —un apuntador a la ubicación de memoria del objeto. Por lo tanto, cualquier modificación hecha a las propiedades del objeto *dentro* de la función afecta directamente al objeto original.


let myArray = [1, 2, 3];

function modifyArray(arr) {
  arr.push(4);
}

modifyArray(myArray);
console.log(myArray); // Salida: [1, 2, 3, 4]

Aquí, myArray se modifica porque la función altera el objeto en sí, no una copia.

Sin embargo, existe una distinción crucial: reasignar el parámetro a un objeto *nuevo* dentro de la función no modifica el original.


let myObject = { a: 1 };

function reassignObject(obj) {
  obj = { a: 2 }; // Asignando un nuevo objeto
}

reassignObject(myObject);
console.log(myObject); // Salida: { a: 1 }

Dentro de reassignObject, obj apunta a un objeto diferente; el myObject original permanece sin cambios.

Reconciliando el Paso por Valor y el Paso por Referencia en JavaScript

El paso de parámetros de JavaScript no es estrictamente uno u otro. Es un sistema dependiente del contexto:

  • Tipos Primitivos: Paso por valor. Se pasa una copia del valor; los cambios internos no afectan al original.
  • Objetos: Paso por referencia. Se pasa una referencia al objeto; los cambios en las propiedades del objeto afectan al original. Reasignar el parámetro a un nuevo objeto dentro de la función deja el original intacto.

Dominar esta distinción es crucial para escribir código JavaScript robusto y predecible. El comportamiento depende completamente de si se está trabajando con primitivos u objetos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *