คำอธิบายที่ว่าไม่มีคำตอบที่อุปกรณ์อื่น ๆ ที่มีปากเสียงเดิมที่มียังคงมีอยู่ แต่ไม่ได้อยู่ในตำแหน่งเดิมในargumentsวัตถุ
argumentsวัตถุมีองค์ประกอบสำหรับแต่ละพารามิเตอร์จริงอย่างใดอย่างหนึ่งให้กับฟังก์ชั่น เมื่อคุณเรียกaคุณจัดหาอาร์กิวเมนต์ที่สาม: ตัวเลข1, และ2 3ดังนั้นมีarguments[1, 2, 3]
function a(args){
console.log(arguments) // [1, 2, 3]
b(arguments);
}
เมื่อคุณเรียกbแต่คุณจะผ่านตรงหนึ่งอาร์กิวเมนต์: a's argumentsวัตถุ ดังนั้นargumentsมี[[1, 2, 3]](เช่นองค์ประกอบหนึ่งซึ่งเป็นaของ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ไม่จริงอาร์เรย์ ( แต่ค่อนข้างวัตถุที่อาร์เรย์เช่นการดำเนินการความหมาย ) และดังนั้นจึงไม่ได้อย่างสิ้นเชิงล้างได้อย่างรวดเร็วก่อนไม่ว่าจะสามารถนำมาใช้ในทางเดียวกันเป็นอาร์เรย์สามารถเกิดขึ้นจริง