Wyjaśnienie, że żadna z pozostałych odpowiedzi nie dostarcza, jest takie, że oryginalne argumenty są nadal dostępne, ale nie w pierwotnej pozycji w argumentsobiekcie.
argumentsObiekt zawiera jeden element za każdy parametr dostarczanego do funkcji. Podczas rozmowy telefonicznej apodać trzy argumenty: Numery 1, 2oraz, 3. Więc argumentszawiera [1, 2, 3].
function a(args){
console.log(arguments) // [1, 2, 3]
b(arguments);
}
Podczas rozmowy telefonicznej b, jednak zdać dokładnie jednego argumentu: a„s argumentsobiektu. Więc argumentszawiera [[1, 2, 3]](czyli jeden element, który ajest argumentsprzedmiotem, który ma właściwości zawierające oryginalne argumenty a).
function b(args){
// arguments are lost?
console.log(arguments) // [[1, 2, 3]]
}
a(1,2,3);
Jak pokazał @Nick, możesz użyć, applyaby podać ustawiony argumentsobiekt w wywołaniu.
Następujące wyniki osiągają ten sam wynik:
function a(args){
b(arguments[0], arguments[1], arguments[2]); // three arguments
}
Ale applyjest właściwe rozwiązanie w ogólnym przypadku.
argumentstak naprawdę nie jest to tablica (ale raczej obiekt, który implementuje semantykę podobną do tablicy ) i dlatego na pierwszy rzut oka nie jest całkowicie jasne, czy można jej używać w taki sam sposób, jak rzeczywistą tablicę.