La explicación de que ninguna de las otras respuestas proporciona es que los argumentos originales todavía están disponibles, pero no en la posición original en el argumentsobjeto.
los arguments objeto contiene un elemento para cada parámetro real proporcionado a la función. Cuando se llama a austed suministra tres argumentos: los números 1, 2y, 3. Entonces, argumentscontiene [1, 2, 3].
function a(args){
console.log(arguments) // [1, 2, 3]
b(arguments);
}
Cuando llama b, sin embargo, pasa exactamente un argumento:a el argumentsobjeto de. Por lo tanto, argumentscontiene [[1, 2, 3]](es decir, un elemento, que es ael argumentsobjeto, que tiene propiedades que contienen los argumentos originales para a).
function b(args){
// arguments are lost?
console.log(arguments) // [[1, 2, 3]]
}
a(1,2,3);
Como demostró @Nick, puede usar applypara proporcionar un argumentsobjeto establecido en la llamada.
Lo siguiente logra el mismo resultado:
function a(args){
b(arguments[0], arguments[1], arguments[2]); // three arguments
}
Pero apply es la solución correcta en el caso general.
argumentsno es una matriz (sino más bien un objeto que implementa una semántica similar a una matriz ) y, por lo tanto, a primera vista no está del todo claro si se puede usar de la misma manera que una matriz real.