Die Erklärung , dass keiner der anderen Antworten liefern , ist , dass die ursprünglichen Argumente sind immer noch vorhanden, aber nicht in der ursprünglichen Position in dem argumentsObjekt.
Das argumentsObjekt enthält ein Element für jeden Aktualparameter, der der Funktion zur Verfügung gestellt wird. Wenn Sie anrufen aversorgen Sie drei Argumente: die Zahlen 1, 2und, 3. Also argumentsenthält [1, 2, 3].
function a(args){
console.log(arguments) // [1, 2, 3]
b(arguments);
}
Wenn Sie jedoch aufrufen b, übergeben Sie genau ein Argument: adas argumentsObjekt. So argumentsenthält [[1, 2, 3]](dh ein Element, das ist a‚s - argumentsObjekt, das Objekte enthält , die ursprünglichen Argumente hat a).
function b(args){
// arguments are lost?
console.log(arguments) // [[1, 2, 3]]
}
a(1,2,3);
Wie @Nick gezeigt hat, können Sie applyein festgelegtes argumentsObjekt im Aufruf bereitstellen .
Folgendes führt zum gleichen Ergebnis:
function a(args){
b(arguments[0], arguments[1], arguments[2]); // three arguments
}
Ist applyaber im allgemeinen Fall die richtige Lösung.
argumentses sich nicht um ein Array handelt (sondern um ein Objekt, das eine Array-ähnliche Semantik implementiert ). Daher ist auf den ersten Blick nicht ganz klar, ob es auf die gleiche Weise wie ein tatsächliches Array verwendet werden kann.