Lulus fungsi sebagai parameter ke fungsi lain. Fungsi ini disebut fungsi panggilan balik
Sering ditemui dalam situasi ini bahwa lapisan A dan B dari suatu proyek diselesaikan oleh personel yang berbeda dalam kolaborasi. Lapisan A bertanggung jawab atas fungsi FUNA, dan lapisan B bertanggung jawab atas funcb. Ketika B Layer ingin menggunakan data modul tertentu, dia mengatakan kepada staf A Layer bahwa saya membutuhkan Anda untuk memberikan data yang memenuhi kebutuhan tertentu, dan Anda memberi saya antarmuka.
Staf di Level A mengatakan: Saya akan memberi Anda data, dan cara menampilkan dan memprosesnya adalah bisnis B.
Tentu saja, Layer B tidak dapat menyediakan antarmuka data untuk setiap persyaratan. B menyediakan A dengan antarmuka untuk dilewati. B memperoleh data, dan kemudian B menulis fungsi untuk menampilkannya.
Artinya, Anda perlu bekerja dengan orang lain dan orang lain memberikan data, dan Anda tidak perlu fokus pada bagaimana orang lain mendapatkan atau membangun data. Anda hanya perlu beroperasi pada data yang Anda dapatkan. Anda perlu menggunakan fungsi panggilan balik saat ini
Oleh karena itu, panggilan balik pada dasarnya adalah pola desain, dan prinsip -prinsip desain jQuery (termasuk kerangka kerja lainnya) mengikuti pola ini.
Contoh menggunakan panggilan balik dalam sinkronisasi (pemblokiran) adalah untuk mengeksekusi Func2 setelah kode Func1 dijalankan.
Salinan kode adalah sebagai berikut:
var func1 = function (callback) {
// Lakukan sesuatu.
(callback && typeof (callback) === "function") && callback ();
}
func1 (func2);
var func2 = function () {
}
Contoh panggilan balik asinkron:
Salinan kode adalah sebagai berikut:
$ (dokumen) .ready (callback);
$ .Ajax ({
URL: "test.html",
Konteks: Document.Body
}). Done (function () {
$ (ini) .addclass ("selesai");
}). fail (function () {
alert ("error");
}). Selalu (function () {
waspada ("lengkap");
});
Perhatikan bahwa permintaan AJAX memang tidak sinkron, tetapi permintaan ini diminta oleh browser. Ketika status permintaan diubah, jika panggilan balik telah ditetapkan sebelumnya, utas asinkron akan menghasilkan acara perubahan status dan memasukkannya ke dalam antrian pemrosesan mesin JavaScript untuk menunggu pemrosesan. Lihat: http://www.phpv.net/html/1700.html
Kapan panggilan balik akan dieksekusi
Fungsi callback biasanya dieksekusi terakhir dalam situasi sinkron, tetapi mungkin tidak dieksekusi dalam situasi asinkron karena peristiwa tersebut tidak dipicu atau kondisinya tidak terpenuhi.
Gunakan kasus fungsi panggilan balik
Pemuatan Sumber Daya: Jalankan panggilan balik setelah pemuatan dinamis file JS, jalankan panggilan balik setelah memuat iframe, jalankan panggilan balik setelah memuat panggilan balik operasi AJAX, jalankan panggilan balik setelah pemuatan gambar, Ajax, dll.
Acara DOM dan acara Node.js didasarkan pada mekanisme panggilan balik (node.js callback mungkin memiliki masalah sarang panggilan balik multi-lapisan).
Waktu tunda setTimeout adalah 0. Peretasan ini sering digunakan. Fungsi yang dipanggil oleh SetTimeout sebenarnya adalah perwujudan panggilan balik
Panggilan rantai: Saat panggilan rantai, mudah untuk menerapkan panggilan rantai dalam metode evaluator (setter) (atau dalam metode yang tidak mengembalikan nilai), tetapi nilai pengambil relatif sulit untuk menerapkan panggilan rantai, karena Anda memerlukan nilai pengambil untuk mengembalikan data yang Anda butuhkan alih -alih penunjuk ini. Jika Anda ingin menerapkan metode rantai, Anda dapat menggunakan fungsi panggilan balik untuk mengimplementasikannya.
Fungsi panggilan setTimeout dan setInterval dapatkan nilai pengembalian mereka. Karena kedua fungsi itu tidak sinkron, yaitu, waktu panggilan mereka dan proses utama program ini relatif independen, tidak ada cara untuk menunggu nilai pengembalian mereka di dalam tubuh, dan program tidak akan berhenti dan menunggu ketika mereka dibuka, jika tidak, makna SetTimeout dan SetInterval akan hilang. Oleh karena itu, tidak ada artinya untuk menggunakan pengembalian, jadi panggilan balik hanya dapat digunakan. Arti callback adalah untuk memberi tahu fungsi proxy dari hasil eksekusi timer untuk pemrosesan tepat waktu.
Saya harus memiliki beberapa informasi yang dikumpulkan secara online dan saya harus memahaminya. Saya akan memilah -milah contoh sendiri:
Salinan kode adalah sebagai berikut:
function fun (num, callback) {
if (num <0) {
peringatan ("Panggil fungsi A-Level untuk ditangani!");
peringatan ("Data tidak bisa negatif, kesalahan input!");
} lain jika (num == 0) {
peringatan ("Panggil fungsi A-Level untuk ditangani!");
peringatan ("Item data ini tidak ada!");
}kalau tidak{
waspada ("Panggilan fungsi B-level untuk diproses!");
Callback (1);
}
}
function test () {
var num = document.geteLementById ("skor"). nilai;
fun (num, function (back) {// fungsi pemrosesan B-layer anonim
peringatan (":"+kembali);
if (num <2)
peringatan ("Nomor 1");
lain jika (num <= 3)
peringatan ("Nomornya adalah 2 atau 3!");
kalau tidak
peringatan ("Angka lebih besar dari 3!");
})
}
Ketika fungsi mulai mengeksekusi kesenangan, pertama-tama pergi untuk menentukan apakah num adalah angka negatif atau nol, jika tidak, jalankan peringatan fungsi pemrosesan lapisan-B (":"+kembali); Output 1, dan tentukan sebagai <2, <= 3,> 3, dll.
Tips Pengalaman:
Yang terbaik untuk memastikan bahwa panggilan balik ada dan harus menjadi referensi fungsi atau ekspresi fungsi:
Salinan kode adalah sebagai berikut:
(callback && typeof (callback) === "function") && callback ();
Salinan kode adalah sebagai berikut:
var obj = {
init: function (callback) {
// TODO ...
if (callback && typeof (callback) === "function") && callback ()) {
callback ('init ...'); // callback
}
}
Akhirnya, tentang mengapa Anda perlu menggunakan fungsi panggilan balik? Metafora berikut sangat jelas dan menarik.
Jika Anda memiliki sesuatu untuk dilakukan, buka asrama berikutnya untuk menemukan teman sekelas dan menemukan bahwa orang tersebut tidak ada di sana, apa yang harus Anda lakukan?
Metode 1: Pergi ke asrama berikutnya setiap beberapa menit untuk melihat apakah orang tersebut ada di sana
Metode 2: Silakan hubungi seseorang di asrama yang sama dengannya dan hubungi Anda saat Anda melihatnya kembali
Yang pertama adalah pemungutan suara, dan yang terakhir adalah panggilan balik.
Lalu Anda berkata, bisakah saya menunggu langsung di asrama di sebelah sampai teman sekelas saya kembali?
Ya, tetapi dengan cara ini, Anda bisa menghemat waktu untuk melakukan hal -hal lain, tetapi sekarang Anda harus menyia -nyiakannya. Ubah panggilan asinkron asli non-blocking menjadi panggilan sinkron yang memblokir.
Callback JavaScript digunakan dalam skenario panggilan asinkron, dan kinerja menggunakan callback lebih baik daripada pemungutan suara.