


Penjelasan terperinci tentang fungsi panggil balik javascript_Pengetahuan asas
Takrif fungsi panggil balik
Fungsi panggil balik ialah fungsi yang dipanggil melalui penuding fungsi. Jika anda menghantar penuding fungsi (alamat) sebagai parameter kepada fungsi lain, dan apabila penuding ini digunakan untuk memanggil fungsi yang ditunjuknya, kami katakan ia adalah fungsi panggil balik. Fungsi panggil balik tidak dipanggil secara langsung oleh pelaksana fungsi, tetapi dipanggil oleh pihak lain apabila peristiwa atau keadaan tertentu berlaku untuk bertindak balas kepada peristiwa atau keadaan.
Dalam JavaScript, takrifan khusus bagi fungsi panggil balik ialah: fungsi A dihantar sebagai parameter (rujukan fungsi) kepada fungsi B yang lain, dan fungsi B ini melaksanakan fungsi A. Katakan saja fungsi A dipanggil fungsi panggil balik. Jika tiada nama (ungkapan fungsi), ia dipanggil fungsi panggil balik tanpa nama. Oleh itu, panggilan balik tidak semestinya digunakan untuk penggunaan tak segerak sering digunakan dalam senario segerak (menyekat) umum, seperti memerlukan pelaksanaan fungsi panggil balik selepas menjalankan operasi tertentu.
Contoh
Contoh penggunaan panggilan balik dalam penyegerakan (blocking), tujuannya adalah untuk melaksanakan func2 selepas pelaksanaan kod func1 selesai.
var func1=function(panggilan balik){
//buat sesuatu.
(panggil balik && jenis(panggil balik) === "fungsi") && panggil balik();
}
func1(func2);
var func2=function(){
}
Acara penggunaan fungsi panggil balik
Pemuatan sumber: laksanakan panggilan balik selepas memuatkan fail js secara dinamik, laksanakan panggilan balik selepas memuatkan iframe, panggilan balik operasi ajax, laksanakan panggilan balik selepas pemuatan imej selesai, AJAX, dsb.
Acara DOM dan acara Node.js adalah berdasarkan mekanisme panggil balik (Panggil balik Node.js mungkin menghadapi masalah dengan sarang panggil balik berbilang lapisan).
Masa kelewatan setTimeout ialah 0. Penggodaman ini sering digunakan Fungsi yang dipanggil oleh settimeout sebenarnya adalah penjelmaan panggilan balik
Panggilan berantai: Apabila dirantai, adalah mudah untuk melaksanakan panggilan berantai dalam kaedah penyerah (setter) (atau dalam kaedah yang tidak mengembalikan nilai itu sendiri), tetapi getter (pengambil) agak sukar untuk dilaksanakan panggilan berantai, kerana anda memerlukan penilai untuk mengembalikan data yang anda perlukan dan bukannya penuding ini. Jika anda ingin melaksanakan kaedah berantai, anda boleh menggunakan fungsi panggil balik untuk melaksanakannya
Panggilan fungsi setTimeout dan setInterval mendapat nilai pulangannya. Oleh kerana kedua-dua fungsi adalah tidak segerak, iaitu, urutan panggilan mereka agak bebas daripada proses utama program, tidak ada cara untuk menunggu nilai pulangan mereka dalam badan, dan program tidak akan berhenti dan menunggu apabila mereka berada. dibuka. Jika tidak, makna setTimeout dan setInterval akan hilang, jadi tidak bermakna untuk menggunakan return, dan panggilan balik hanya boleh digunakan. Maksud panggilan balik adalah untuk memberitahu fungsi ejen hasil pelaksanaan pemasa untuk pemprosesan tepat pada masanya.
Fungsi juga merupakan objek
Jika anda ingin memahami fungsi panggil balik, anda mesti memahami dengan jelas peraturan fungsi tersebut. Dalam JavaScript, fungsi adalah pelik, tetapi ia sememangnya objek. Lebih tepatnya, fungsi ialah objek Fungsi yang dibuat menggunakan pembina Function(). Objek Fungsi mengandungi rentetan yang mengandungi kod JavaScript fungsi tersebut. Jika anda datang dari C atau Java, ini mungkin kelihatan pelik. Bagaimanakah kod itu boleh menjadi rentetan? Tetapi dengan javascript, ini adalah perkara biasa. Perbezaan antara data dan kod adalah kabur.
//Anda boleh mencipta fungsi seperti ini
var fn = Fungsi baharu("arg1", "arg2", "return arg1 * arg2;");
fn(2, 3); //6
Satu kelebihan melakukan ini ialah anda boleh menghantar kod ke fungsi lain, atau anda boleh menghantar pembolehubah atau objek biasa (kerana kod secara literal hanyalah objek).
Menghantar fungsi sebagai panggil balik
Mudah untuk lulus fungsi sebagai parameter.
fungsi fn(arg1, arg2, panggil balik){
var num = Math.ceil(Math.random() * (arg1 - arg2) arg2);
panggil balik(nombor);//Pindahkan hasil
}
fn(10, 20, fungsi(bilangan){
console.log("Panggil balik! Num: " num);
});//Hasilnya ialah nombor rawak antara 10 dan 20
Mungkin ini kelihatan menyusahkan atau agak bodoh Mengapa anda tidak mengembalikan hasilnya seperti biasa? Tetapi apabila anda perlu menggunakan fungsi panggil balik, anda mungkin tidak fikir begitu!
Jauhi jalan
Fungsi tradisional memasukkan data dalam bentuk parameter dan menggunakan pernyataan pulangan untuk mengembalikan nilai. Secara teorinya, terdapat pernyataan pulangan pada penghujung fungsi, iaitu secara struktur: titik input dan titik output. Ini lebih mudah difahami Fungsi pada dasarnya adalah pemetaan proses pelaksanaan antara input dan output.
Walau bagaimanapun, apabila proses pelaksanaan fungsi sangat panjang, adakah anda memilih untuk menunggu fungsi selesai pemprosesan atau menggunakan fungsi panggil balik untuk pemprosesan tak segerak? Dalam kes ini, menjadi penting untuk menggunakan fungsi panggil balik, sebagai contoh: permintaan AJAX. Jika anda menggunakan fungsi panggil balik untuk pemprosesan, kod boleh terus melaksanakan tugas lain tanpa menunggu dengan sia-sia. Dalam pembangunan sebenar, panggilan tak segerak sering digunakan dalam JavaScript, malah ia amat disyorkan di sini!
Di bawah ialah contoh yang lebih komprehensif menggunakan AJAX untuk memuatkan fail XML dan menggunakan fungsi call() untuk memanggil fungsi panggil balik dalam konteks objek yang diminta.
fungsi fn(url, panggil balik){
var httpRequest; //Buat XHR
httpRequest = window.XMLHttpRequest ? XMLHttpRequest() baharu :
window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP" ): undefined;//Pengesanan fungsional untuk IE
httpRequest.onreadystatechange = function(){
Jika(httpRequest.readystate === 4
. callback.call(httpRequest.responseXML); }
};
httpRequest.open("GET", url);
httpRequest.send();
}
fn("text.xml", function(){ //Fungsi panggilan console.log(this); //Keluaran selepas pernyataan ini
});
console.log("ini akan dijalankan sebelum panggilan balik di atas."); //Pernyataan ini dikeluarkan dahulu
Akhirnya, pernyataan console.log kedua dilaksanakan terlebih dahulu kerana fungsi panggil balik tidak dilaksanakan sehingga permintaan selesai.
Contoh di atas tidak mudah difahami, jadi lihat contoh berikut:
Kembalikan fungsi(){
a *= 2;
kembali a; };
}
var f = foo();
f(); //kembali 20.
f(); //kembali 40.
Apabila fungsi dipanggil secara luaran, pembolehubah a masih boleh diakses. Ini semua kerana skop dalam JavaScript adalah leksikal. Fungsi dijalankan dalam skop di mana ia ditakrifkan (skop di dalam foo dalam contoh di atas), bukan skop di mana fungsi itu dijalankan. Selagi f ditakrifkan dalam foo, ia boleh mengakses semua pembolehubah yang ditakrifkan dalam foo, walaupun pelaksanaan foo telah tamat. Kerana skopnya akan disimpan, tetapi hanya fungsi yang dikembalikan boleh mengakses skop yang disimpan ini. Mengembalikan fungsi tanpa nama bersarang ialah cara paling biasa untuk membuat penutupan.

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

Aplikasi JavaScript di dunia nyata termasuk pengaturcaraan sisi pelayan, pembangunan aplikasi mudah alih dan Internet of Things Control: 1. Pengaturcaraan sisi pelayan direalisasikan melalui node.js, sesuai untuk pemprosesan permintaan serentak yang tinggi. 2. Pembangunan aplikasi mudah alih dijalankan melalui reaktnatif dan menyokong penggunaan silang platform. 3. Digunakan untuk kawalan peranti IoT melalui Perpustakaan Johnny-Five, sesuai untuk interaksi perkakasan.

Saya membina aplikasi SaaS multi-penyewa berfungsi (aplikasi edTech) dengan alat teknologi harian anda dan anda boleh melakukan perkara yang sama. Pertama, apakah aplikasi SaaS multi-penyewa? Aplikasi SaaS Multi-penyewa membolehkan anda melayani beberapa pelanggan dari Sing

Artikel ini menunjukkan integrasi frontend dengan backend yang dijamin oleh permit, membina aplikasi edtech SaaS yang berfungsi menggunakan Next.Js. Frontend mengambil kebenaran pengguna untuk mengawal penglihatan UI dan memastikan permintaan API mematuhi dasar peranan

JavaScript adalah bahasa utama pembangunan web moden dan digunakan secara meluas untuk kepelbagaian dan fleksibiliti. 1) Pembangunan front-end: Membina laman web dinamik dan aplikasi satu halaman melalui operasi DOM dan kerangka moden (seperti React, Vue.js, sudut). 2) Pembangunan sisi pelayan: Node.js menggunakan model I/O yang tidak menyekat untuk mengendalikan aplikasi konkurensi tinggi dan masa nyata. 3) Pembangunan aplikasi mudah alih dan desktop: Pembangunan silang platform direalisasikan melalui reaktnatif dan elektron untuk meningkatkan kecekapan pembangunan.

Trend terkini dalam JavaScript termasuk kebangkitan TypeScript, populariti kerangka dan perpustakaan moden, dan penerapan webassembly. Prospek masa depan meliputi sistem jenis yang lebih berkuasa, pembangunan JavaScript, pengembangan kecerdasan buatan dan pembelajaran mesin, dan potensi pengkomputeran IoT dan kelebihan.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver Mac版
Alat pembangunan web visual

Dreamweaver CS6
Alat pembangunan web visual