Saya mengerti meneruskan fungsi ke fungsi lain sebagai panggilan balik dan menjalankannya, tapi saya tidak mengerti implementasi terbaik untuk melakukan itu. Saya mencari contoh yang sangat mendasar, seperti ini:
var myCallBackExample = {
myFirstFunction : function( param1, param2, callback ) {
// Do something with param1 and param2.
if ( arguments.length == 3 ) {
// Execute callback function.
// What is the "best" way to do this?
}
},
mySecondFunction : function() {
myFirstFunction( false, true, function() {
// When this anonymous function is called, execute it.
});
}
};
Di myFirstFunction, jika saya mengembalikan panggilan balik baru (), maka berfungsi dan menjalankan fungsi anonim, tetapi itu sepertinya bukan pendekatan yang tepat untuk saya.
arguments
bukan array, Anda masih bisa merujuk panjangnya sebagaiarguments.length
- cobalah. Properti ini mengacu pada jumlah argumen yang benar-benar diteruskan, dan belum tentu jumlah parameter dalam tanda tangan fungsi.Jawaban:
Anda bisa mengatakannya
Bergantian Anda dapat menggunakan
call
metode ini jika Anda ingin menyesuaikan nilaithis
dalam panggilan balik.Di dalam fungsinya
this
akan menjadi apa punnewValueForThis
itu.sumber
Anda harus memeriksa apakah panggilan balik itu ada, dan merupakan fungsi yang dapat dieksekusi:
Banyak perpustakaan (jQuery, dojo, dll.) Menggunakan pola yang sama untuk fungsi asinkronnya, serta node.js untuk semua fungsi async (nodejs biasanya lewat
error
dandata
ke panggil balik). Melihat ke kode sumber mereka akan membantu!sumber
callback
ke string dan kemudian memeriksa tipenya? Apakah ini akan meningkatkan kinerja? Ini seperti memeriksa jenis, memeriksa apakah boolean yang dikonversi mengembalikan nilai true dan kemudian memeriksa jenisnya lagi dan mengujinya terhadap string ... Bisakah Anda menjelaskan mengapa?typeof(callback)
mencapai itu untuk Anda?typeof(null) === "Object"
,typeof("undefined") === "undefined"
callback
tidak dilemparkan ke string, tipenya sedang diperiksa untuk melihat apakah itu suatu fungsi, sebelum dipanggil. Kode mungkin diterimacallback
sebagai argumen, dan tidak pasti bahwa argumen tersebut adalah tipe yang dapat dipanggil - atau mungkin argumen tersebut dari berbagai jenis dalam upaya untuk menyediakan bentuk polimorfisme di mana kode dapat bereaksi secara berbeda terhadaptypeof
argumen yang berbeda .Ada 3 kemungkinan utama untuk menjalankan suatu fungsi:
Metode yang Anda pilih tergantung apakah:
Documents untuk Function.call , Function.apply
sumber
Panggilan balik adalah tentang sinyal dan "baru" adalah tentang membuat instance objek.
Dalam hal ini akan lebih tepat untuk mengeksekusi "callback ();" daripada "return callback baru ()" karena Anda toh tidak melakukan apa pun dengan nilai pengembalian.
(Dan argumen.length == 3 tes benar-benar kikuk, fwiw, lebih baik untuk memeriksa bahwa param callback ada dan merupakan fungsi.)
sumber
implementasi yang tepat adalah:
ini membuat parameter callback opsional ..
sumber
Kamu bisa memakai:
Contoh di bawah ini sedikit lebih komprehensif:
sumber
Berikut ini adalah contoh dasar yang menjelaskan
callback()
fungsi dalam JavaScript:JSFiddle
sumber
sumber