En las funciones existe un objeto llamado arguments. Este objeto contiene los parámetros que se envían a las funciones.
Nota:
Aunque los parámetros se encuentran el forma de arreglo y también tiene la propiedad length (para obtener el número de parámetros que recibe la función) arguments no es un arreglo.
function obtener_parametros(valor) {
console.log(valor);
console.log(arguments);
}
obtener_parametros("uno");
Aún cuando la función no tenga definido el uso de parámetros, si se incluyen al mandarla llamar, arguments va a contener los parámetros que se utilicen.
function sin_definir_parametros() {
console.log(arguments);
}
sin_definir_parametros("uno", "dos", "tres", "cuatro");
Al asignar un valor a un elemento dentro de arguments, el valor del parámetro es actualizado.
function modificar_valor(parametro) {
console.log("Original");
console.log(arguments[0]);
console.log(arguments[1]);
console.log(parametro);
arguments[0] = 100;
arguments[1] = 50;
console.log("Asignar");
console.log(arguments[0]);
console.log(arguments[1]);
console.log(parametro);
}
modificar_valor(1);
Nota:
Únicamente se actualizan los parámetros que se encuentren definidos en la declaración de la función. Si el parámetro no se encuentra definido, sería como asignar un valor – a un elemento de arguments -.
callee
Una propiedad que tiene este objeto es callee. Esta propiedad contiene el código de la función en la cuál se utiliza arguments.
function mostrar_funcion() {
console.log(arguments.callee);
}
mostrar_funcion();
callee es utilizado para funciones recursivas – funciones que, dentro del código mandan llamar la misma función.
var i = 1;
var mensaje = "Mensaje: ";
function recursiva(msg) {
var nuevo_mensaje = msg + i;
i++;
console.log(nuevo_mensaje);
if (i < 5) {
arguments.callee(nuevo_mensaje);
}
}
recursiva(mensaje);