I've mencoba berikut dengan sukses:
function a(args){
b(arguments);
}
function b(args){
// arguments are lost?
}
a(1,2,3);
Dalam fungsi ini, saya dapat menggunakan argumen kata kunci untuk mengakses array argumen, dalam fungsi b ini hilang. Apakah ada cara untuk melewati argumen lain fungsi javascript seperti yang saya mencoba untuk melakukan?
Gunakan .berlaku()
untuk memiliki akses yang sama untuk argumen
fungsi b
, seperti ini:
function a(){
b.apply(null, arguments);
}
function b(){
alert(arguments); //arguments[0] = 1, etc
}
a(1,2,3);
[Anda dapat menguji it out di sini][2].
penyebaran operator memungkinkan ekspresi akan diperluas di tempat-tempat di mana beberapa argumen (untuk fungsi panggilan) atau beberapa elemen (untuk array literal) yang diharapkan.
ECMAScript ES6 menambahkan operator baru yang memungkinkan anda melakukan hal ini dalam cara yang lebih praktis: ...Menyebar Operator.
Contoh tanpa menggunakan menerapkan
metode:
function a(...args){
b(...args);
b(6, ...args, 8) // You can even add more elements
}
function b(){
console.log(arguments)
}
a(1, 2, 3)
Catatan cuplikan Ini menghasilkan kesalahan sintaks jika browser anda masih menggunakan ES5.
Editor's catatan: Sejak cuplikan menggunakan konsol.log()
, anda harus buka browser anda's JS konsol untuk melihat hasilnya - akan ada no di halaman hasil.
Maka akan muncul hasil seperti ini:
Singkatnya, penyebaran operator dapat digunakan untuk tujuan yang berbeda jika anda're menggunakan array, sehingga hal ini juga dapat digunakan untuk argumen fungsi, anda dapat melihat contoh yang sama dijelaskan dalam dokumen resmi: Sisa parameters
Penjelasan bahwa tidak ada jawaban yang lain persediaan adalah bahwa argumen yang asli yang masih tersedia, tapi tidak di posisi aslinya di argumen
objek.
The argumen
objek berisi satu elemen untuk masing-masing parameter aktual yang disediakan untuk fungsi. Ketika anda menelepon a
yang anda berikan tiga argumen: angka-angka 1
, 2
, dan, 3
. Jadi, argumen
berisi[1, 2, 3]
.
function a(args){
console.log(arguments) // [1, 2, 3]
b(arguments);
}
Ketika anda menelepon b
, namun, anda lulus tepat satu argumen: a
's argumen
objek. Jadi argumen
berisi[[1, 2, 3]]
(yaitu salah satu unsur, yaitu a
's argumen
objek, yang telah mengandung sifat asli argumen untuk a
).
function b(args){
// arguments are lost?
console.log(arguments) // [[1, 2, 3]]
}
a(1,2,3);
Seperti @Nick menunjukkan, anda dapat menggunakan apply
untuk menyediakan satu set argumen
objek dalam panggilan.
Berikut mencapai hasil yang sama:
function a(args){
b(arguments[0], arguments[1], arguments[2]); // three arguments
}
Tapi terapkan
adalah solusi yang tepat dalam kasus umum.