Penjelasan bahwa tidak ada jawaban perlengkapan lainnya adalah bahwa argumen asli yang masih tersedia, tetapi tidak dalam posisi asli di arguments
objek.
The arguments
objek berisi satu elemen untuk setiap parameter yang sebenarnya disediakan untuk fungsi. Ketika Anda menelepon a
Anda menyediakan tiga argumen: nomor 1
, 2
dan, 3
. Jadi, arguments
berisi [1, 2, 3]
.
function a(args){
console.log(arguments) // [1, 2, 3]
b(arguments);
}
Ketika Anda memanggil b
, namun, Anda lulus tepat satu argumen: a
's arguments
objek. Jadi arguments
mengandung [[1, 2, 3]]
(yaitu satu elemen, yaitu a
's arguments
objek, yang memiliki sifat yang berisi argumen asli untuk a
).
function b(args){
// arguments are lost?
console.log(arguments) // [[1, 2, 3]]
}
a(1,2,3);
Seperti yang ditunjukkan @Nick, Anda dapat menggunakan apply
untuk menyediakan arguments
objek yang ditetapkan dalam panggilan.
Berikut ini mencapai hasil yang sama:
function a(args){
b(arguments[0], arguments[1], arguments[2]); // three arguments
}
Tetapi apply
apakah solusi yang benar dalam kasus umum.
arguments
bukan array (melainkan objek yang mengimplementasikan semantik mirip array ) dan oleh karena itu tidak sepenuhnya jelas pada pandangan pertama apakah dapat digunakan dengan cara yang sama seperti array aktual.