Rumah  >  Artikel  >  hujung hadapan web  >  Memahami fungsi panggil balik (panggilan balik) dalam kemahiran javascript_javascript

Memahami fungsi panggil balik (panggilan balik) dalam kemahiran javascript_javascript

WBOY
WBOYasal
2016-05-16 16:37:551234semak imbas

Saya menonton ekspres baru-baru ini, dan saya melihat di mana-mana penggunaan fungsi panggil balik yang mengambil fungsi sebagai parameter. Jika anda tidak memahami konsep ini, kod nodejs dan express akan menjadi kucar-kacir. Contohnya:

Salin kod Kod adalah seperti berikut:

app.use(function(req, res, next) {
var err = Ralat baharu('Tidak Ditemui');
err.status = 404;
seterusnya(err);
});

app ialah objek, penggunaan ialah kaedah, parameter kaedah ialah fungsi tanpa nama dengan parameter, dan badan fungsi diberikan secara langsung pada penghujungnya. Bagaimana untuk memahami kod ini? Mari kita fahami konsep fungsi panggil balik.
Pertama sekali, anda perlu memahami bahawa dalam js, fungsi juga merupakan objek, yang boleh diberikan kepada pembolehubah dan diletakkan sebagai parameter dalam senarai parameter fungsi. Contohnya:
Salin kod Kod adalah seperti berikut:

var doSomething = function(a,b)
{
kembalikan a b;
}

Maksud kod ini adalah untuk mentakrifkan fungsi tanpa nama Kecuali fungsi tanpa nama ini tidak mempunyai nama, ia tidak berbeza daripada fungsi biasa. Kemudian tetapkan fungsi tanpa nama kepada pembolehubah doSomething. Seterusnya kami memanggil:
Salin kod Kod adalah seperti berikut:

console.log(doSomething(2,3));

Ini akan mengeluarkan 5.

Fungsi panggil balik diletakkan dalam senarai parameter fungsi lain (seperti induk), diserahkan kepada induk ini sebagai parameter, dan kemudian dilaksanakan di suatu tempat dalam badan fungsi induk. Ia abstrak, mari kita lihat contoh:

Salin kod Kod adalah seperti berikut:

// Untuk menggambarkan konsep panggil balik
var doit = ​​​​fungsi(panggilan balik)
{
var a = 1,
         b = 2,
c = 3;
var t = panggil balik(a,b,c);
Kembalikan t 10;
};
var d = doit(fungsi(x,y,z){
Kembali (x y z);
});
console.log(d);

Mula-mula tentukan fungsi doit, yang mempunyai panggilan balik parameter. Panggilan balik ini ialah fungsi panggil balik, dan nama itu boleh sewenang-wenangnya. Melihat badan fungsi, mula-mula tentukan tiga pembolehubah a, b, dan c. Kemudian panggil fungsi panggil balik. Akhirnya mengembalikan nilai.

Fungsi doit dipanggil di bawah. Perlu diingatkan bahawa apabila doit ditakrifkan sebentar tadi, panggilan balik tidak ditakrifkan, jadi saya tidak tahu apa panggilan balik digunakan. Ini sebenarnya mudah difahami Apabila kita biasanya mentakrifkan fungsi, parameter hanya diberi nama, seperti a, dan a digunakan dalam badan fungsi, tetapi keseluruhan proses tidak tahu apa itu hanya apabila memanggilnya fungsi Hanya kemudian nyatakan nilai khusus a, seperti 2. Mengimbas kembali, apabila memanggil doit, kita perlu menentukan apakah panggilan balik. Seperti yang anda lihat, fungsi ini melengkapkan fungsi jumlah.

Proses pelaksanaan kod di atas ialah:

Panggil fungsi doit, parameter ialah fungsi tanpa nama, masukkan badan fungsi doit, mula-mula tentukan a, b, c, dan kemudian laksanakan fungsi tanpa nama tadi, parameternya ialah a, b, c dan kembalikan a t, dan akhirnya kembali A t 10 memberikan d.

Kembali kepada contoh asal, app.use(...) ialah panggilan fungsi. Kita boleh membayangkan bahawa kaedah penggunaan mesti telah ditakrifkan sebelum ini, tetapi ia tidak diberikan di sini. Sebaik sahaja anda membandingkan kedua-dua contoh ini, anda boleh memahaminya dengan segera.

Apabila menggunakan nodej dan ekspres, adalah mustahil untuk kita mencari definisi fungsi bagi setiap kaedah atau fungsi dan melihatnya. Jadi hanya tahu parameter apa yang dihantar ke panggil balik dalam definisi itu. Kemudian apabila memanggil kaedah atau fungsi, kami menentukan sendiri fungsi tanpa nama dalam parameter untuk melengkapkan fungsi tertentu.

Tamat!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn