arguments

Categories:

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);