Saya mencoba meneruskan beberapa parameter ke fungsi yang digunakan sebagai panggilan balik, bagaimana saya bisa melakukannya?
function tryMe (param1, param2) {
alert (param1 + " and " + param2);
}
function callbackTester (callback, param1, param2) {
callback (param1, param2);
}
callbackTester (tryMe, "hello", "goodbye");
Jawaban:
Jika Anda menginginkan sesuatu yang sedikit lebih umum, Anda dapat menggunakan variabel argumen seperti:
Tetapi sebaliknya, contoh Anda berfungsi dengan baik (argumen [0] dapat digunakan sebagai pengganti panggilan balik dalam tester)
sumber
callback.apply(arguments)
sebagai fungsi tubuh untukcallbackTester
diperluas melampaui dua skenario argumen.Ini juga akan berfungsi:
Skenario lain:
sumber
if (typeof window[callback] == 'function') window[callback].call(this);
Pertanyaan Anda tidak jelas. Jika Anda bertanya bagaimana Anda bisa melakukan ini dengan cara yang lebih sederhana, Anda harus melihat pada metode ECMAScript 5th edition .bind () , yang merupakan anggota Function.prototype . Dengan menggunakannya, Anda dapat melakukan sesuatu seperti ini:
Anda juga dapat menggunakan kode berikut ini, yang menambahkan metode jika tidak tersedia di browser saat ini:
Contoh
bind () - Dokumentasi PrototypeJS
sumber
Array.prototype.slice.call(arguments)
danarguments.slice()
?f = function(arg1,arg2){alert(arg1+arg2);}.bind(this,"abc");
f("def") // Gives "abcdef"
Ketika Anda memiliki panggilan balik yang akan dipanggil oleh sesuatu selain kode Anda dengan jumlah params tertentu dan Anda ingin meneruskan params tambahan, Anda dapat melewati fungsi wrapper sebagai callback dan di dalam wrapper melewati param tambahan.
sumber
Jika Anda tidak yakin berapa banyak parameter yang akan dilewatkan ke fungsi panggilan balik, gunakan
apply
fungsi.sumber
Bungkus fungsi 'anak' yang diteruskan sebagai / dengan argumen dalam pembungkus fungsi untuk mencegah mereka dievaluasi ketika fungsi 'orang tua' dipanggil.
sumber
Kode dari pertanyaan dengan sejumlah parameter dan konteks panggilan balik:
sumber
Gunakan fungsi kari seperti dalam contoh sederhana ini.
sumber
Versi baru untuk skenario di mana panggilan balik akan dipanggil oleh beberapa fungsi lain, bukan kode Anda sendiri, dan Anda ingin menambahkan parameter tambahan.
Misalnya, mari kita berpura-pura memiliki banyak panggilan bersarang dengan panggilan balik sukses dan kesalahan. Saya akan menggunakan janji sudut untuk contoh ini tetapi kode javascript dengan panggilan balik akan sama untuk tujuan tersebut.
Sekarang Anda mungkin ingin mengacaukan kode Anda dengan mendefinisikan fungsi untuk mencatat kesalahan, menjaga asal kesalahan untuk tujuan debugging. Ini adalah bagaimana Anda akan melanjutkan untuk memperbaiki kode Anda:
Fungsi panggilan masih akan menambahkan parameter kesalahan setelah parameter fungsi panggilan balik Anda.
sumber
Saya sedang mencari hal yang sama dan berakhir dengan solusi dan di sini ini adalah contoh sederhana jika ada yang mau melalui ini.
Juga diposting pertanyaan lain di sini
sumber
Biarkan saya memberi Anda contoh gaya Node.js yang sangat sederhana menggunakan callback:
dan HTML yang akan memberikan hasil:
Anda dapat bermain dengannya di sini: https://jsfiddle.net/q8gnvcts/ - misalnya mencoba meneruskan string alih-alih nomor: myTest ('some string', 6, function (err, result) .. dan lihat hasilnya.
Saya harap contoh ini membantu karena ini mewakili ide yang sangat mendasar dari fungsi panggilan balik.
sumber
baca lebih lanjut tentang sintaks spread
sumber
sumber