Lời giải thích rằng không có nguồn cung cấp câu trả lời khác là những lập luận ban đầu là vẫn có sẵn, nhưng không phải ở vị trí ban đầu trong các argumentsđối tượng.
Đối argumentstượng chứa một phần tử cho mỗi tham số thực tế được cung cấp cho hàm. Khi bạn gọi abạn cung cấp ba đối số: số 1, 2và, 3. Vì vậy, argumentscó chứa [1, 2, 3].
function a(args){
console.log(arguments) // [1, 2, 3]
b(arguments);
}
Khi bạn gọi b, tuy nhiên, bạn vượt qua chính xác một lập luận: a's argumentsđối tượng. Vì vậy, argumentscó chứa [[1, 2, 3]](tức là một yếu tố, đó là a's argumentsđối tượng, trong đó có các thuộc tính có chứa các đối số gốc để a).
function b(args){
// arguments are lost?
console.log(arguments) // [[1, 2, 3]]
}
a(1,2,3);
Như @Nick đã trình bày, bạn có thể sử dụng applyđể cung cấp một argumentsđối tượng được đặt trong cuộc gọi.
Sau đây đạt được kết quả tương tự:
function a(args){
b(arguments[0], arguments[1], arguments[2]); // three arguments
}
Nhưng applylà giải pháp chính xác trong trường hợp chung.
argumentskhông thực sự là một mảng (mà là một đối tượng thực hiện ngữ nghĩa giống như mảng ) và do đó, nó không hoàn toàn rõ ràng ngay từ cái nhìn đầu tiên liệu nó có thể được sử dụng theo cách tương tự như một mảng thực tế hay không.