Saltar al contenido principal

Parámetros y argumentos

Cuando declaramos funciones, es común que necesitemos parámetros para trabajar con diferentes valores. Además, podemos establecer valores por defecto y utilizar parámetros variables.

Paso de parámetros por valor y por referencia

Cuando se llama a una función y se pasan parámetros, estos se pueden pasar de dos maneras: por valor o por referencia, dependiendo del tipo de dato que se esté enviando. Es fundamental entender cómo funciona este mecanismo para evitar efectos secundarios no deseados en nuestras funciones.

Paso de parámetros por valor

En el paso de parámetros por valor, cuando se pasa una variable a una función, se pasa una copia del valor. Esto significa que cualquier cambio hecho al parámetro dentro de la función no afectará la variable original fuera de la función. Los tipos de datos primitivos (números, strings, booleanos, null y undefined) se pasan siempre por valor.

function modificarValor(x) {
x = x + 5;
console.log(`Valor dentro de la función: ${x}`); // 15
}

let numero = 10;
modificarValor(numero);
console.log(`Valor fuera de la función: ${numero}`); // 10

En este ejemplo, la variable numero tiene el valor 10, que es un número (tipo primitivo). Al pasarla a la función modificarValor, se pasa una copia de ese valor. Dentro de la función, x cambia a 15, pero el valor de numero fuera de la función permanece inalterado.

Paso de parámetros por referencia

En el paso de parámetros por referencia, cuando se pasa un objeto (incluidos arrays y funciones) a una función, se pasa una referencia a ese objeto en la memoria, no una copia del valor. Esto significa que si se modifica el objeto dentro de la función, también se verá modificado fuera de ella, porque ambas variables (dentro y fuera de la función) apuntan al mismo objeto en memoria.

function modificarObjeto(obj) {
obj.nombre = "Carlos";
console.log(`Valor dentro de la función: ${obj.nombre}`); // Carlos
}

let persona = { nombre: "Ana" };
modificarObjeto(persona);
console.log(`Valor fuera de la función: ${persona.nombre}`); // Carlos

Aquí, la variable persona es un objeto. Cuando pasamos este objeto a la función modificarObjeto, se pasa por referencia, por lo que cualquier cambio hecho dentro de la función afectará directamente al objeto original. Al modificar la propiedad nombre dentro de la función, el cambio se refleja también fuera de la función.

Parámetros por defecto

Los parámetros por defecto permiten inicializar un valor si no se proporciona uno al invocar la función.

function saludo(nombre = "Usuario") {
console.log(`Hola, ${nombre}`);
}

saludo(); // Hola, Usuario
saludo("Juan"); // Hola, Juan

Rest parameters (...args)

Los rest parameters (...args) permiten que una función acepte un número indeterminado de argumentos, los cuales son almacenados en un array.

function sumarTodos(...numeros) {
return numeros.reduce((acc, num) => acc + num, 0);
}

console.log(sumarTodos(1, 2, 3, 4)); // 10

Funciones con retorno

Una función puede devolver un valor utilizando la palabra clave return. Si no se especifica un valor de retorno, la función devolverá undefined.

function multiplicar(a, b) {
return a * b;
}

console.log(multiplicar(2, 3)); // 6