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 arguments
objeto.
los arguments
objeto contiene un elemento para cada parámetro real proporcionado a la función. Cuando se llama a a
usted suministra tres argumentos: los números 1
, 2
y, 3
. Entonces, arguments
contiene [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 arguments
objeto de. Por lo tanto, arguments
contiene [[1, 2, 3]]
(es decir, un elemento, que es a
el arguments
objeto, 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 apply
para proporcionar un arguments
objeto 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.
arguments
no 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.