Пояснення, що жоден з інших відповідей не дає, полягає в тому, що оригінальні аргументи все ще доступні, але не в початковому положенні вarguments об'єкті.
argumentsОб'єкт містить один елемент для кожного фактичного параметра , наданого функцією. При виклику aви ставите три аргументи: числа 1, 2, і, 3. Отже, argumentsмістить [1, 2, 3].
function a(args){
console.log(arguments) // [1, 2, 3]
b(arguments);
}
Коли ви телефонуєте b, ви передаєте рівно один аргумент: a's argumentsobject. Таким чином , argumentsмістить [[1, 2, 3]](тобто один елемент, який є a«s argumentsоб'єкт, який має властивість , що містить вихідні аргументи a).
function b(args){
// arguments are lost?
console.log(arguments) // [[1, 2, 3]]
}
a(1,2,3);
Як показав @Nick, ви можете використовувати applyдля надання заданого argumentsоб'єкта у виклику.
Наступний результат досягає:
function a(args){
b(arguments[0], arguments[1], arguments[2]); // three arguments
}
Але чи applyє правильним рішенням у загальному випадку.
argumentsце насправді не масив (це, скоріше, об'єкт, що реалізує семантику, схожу на масив ), і тому на перший погляд не зовсім зрозуміло, чи можна його використовувати так само, як може бути власне масив.