Jadual Kandungan
1. Fungsi panggil balik
2. Panggilan balik segerak
Contoh panggilan balik segerak<.>
总结
Rumah hujung hadapan web tutorial js Analisis mendalam fungsi panggil balik dalam JavaScript (segerak dan tak segerak)

Analisis mendalam fungsi panggil balik dalam JavaScript (segerak dan tak segerak)

Aug 04, 2022 am 10:05 AM
javascript hujung hadapan fungsi panggil balik

Fungsi panggil balik ialah salah satu konsep yang perlu diketahui oleh setiap pengaturcara bahagian hadapan. Panggilan balik boleh digunakan dalam tatasusunan, fungsi pemasa, janji dan pengendalian acara. Artikel ini akan menerangkan konsep fungsi panggil balik dan membantu anda membezakan antara dua jenis panggil balik: segerak dan tak segerak.

Analisis mendalam fungsi panggil balik dalam JavaScript (segerak dan tak segerak)

1. Fungsi panggil balik

Mula-mula tulis fungsi untuk menyambut orang.

Hanya buat fungsi name yang menerima greet(name) parameter. Fungsi ini sepatutnya mengembalikan mesej ucapan:

function greet(name) {
  return `Hello, ${name}!`;
}

greet('Cristina'); // => 'Hello, Cristina!'
Salin selepas log masuk

Bagaimana jika anda memberi salam kepada ramai orang? Anda boleh menggunakan kaedah tatasusunan khas array.map() untuk mencapai:

const persons = ['Cristina', 'Ana'];

const messages = persons.map(greet);
messages; // => ['Hello, Cristina!', 'Hello, Ana!']
Salin selepas log masuk

persons.map(greet) Dapatkan semua elemen tatasusunan persons dan panggil fungsi greet() dengan setiap elemen sebagai parameter panggilan : `greet('Cristina'), greet('Ana').

Menariknya, kaedah persons.map(greet) boleh menerima fungsi greet() sebagai parameter. Dengan cara ini, greet() menjadi fungsi panggil balik .

persons.map(greet) ialah fungsi yang mengambil fungsi lain sebagai parameter, jadi ia dipanggil fungsi tertib lebih tinggi.

Fungsi panggil balik digunakan sebagai parameter fungsi tertib lebih tinggi dan fungsi tertib tinggi menjalankan operasi dengan memanggil fungsi panggil balik.

Perkara yang penting ialah fungsi peringkat tinggi bertanggungjawab untuk memanggil panggilan balik dan menyediakannya dengan parameter yang betul.

Dalam contoh sebelumnya, fungsi tertib tinggi persons.map(greet) bertanggungjawab untuk memanggil fungsi greet() dan masing-masing mengambil semua elemen dalam tatasusunan 'Cristina' dan Ana ' sebagai parameter.

Ini menyediakan peraturan mudah untuk mengenal pasti panggilan balik. Jika anda mentakrifkan fungsi dan menyediakannya sebagai parameter kepada fungsi lain, maka ini mencipta panggilan balik.

Anda boleh menulis fungsi tertib tinggi anda sendiri menggunakan panggilan balik. Berikut ialah versi setara kaedah array.map():

function map(array, callback) {
  const mappedArray = [];
  for (const item of array) { 
    mappedArray.push(
      callback(item)    );
  }
  return mappedArray;
}

function greet(name) {
  return `Hello, ${name}!`;
}

const persons = ['Cristina', 'Ana'];

const messages = map(persons, greet);messages; // => ['Hello, Cristina!', 'Hello, Ana!']
Salin selepas log masuk

map(array, callback) ialah fungsi tertib lebih tinggi kerana ia memerlukan fungsi panggil balik sebagai argumen dan kemudian memanggil fungsi panggil balik itu di dalam badannya: callback(item) .

Perhatikan bahawa fungsi biasa (ditakrifkan dengan kata kunci function) atau fungsi anak panah (ditakrifkan dengan anak panah tebal =>) juga boleh digunakan sebagai panggilan balik.

2. Panggilan balik segerak

Terdapat dua cara untuk memanggil panggilan balik: segerak dan tak segerak panggil balik.

Panggil balik segerak "menyekat": fungsi tertib tinggi tidak meneruskan pelaksanaan sehingga fungsi panggil balik selesai.

Sebagai contoh, panggil fungsi map() dan greet().

function map(array, callback) {
  console.log('map() starts');
  const mappedArray = [];
  for (const item of array) { mappedArray.push(callback(item)) }
  console.log('map() completed');
  return mappedArray;
}

function greet(name) {
  console.log('greet() called');
  return `Hello, ${name}!`;
}

const persons = ['Cristina'];

map(persons, greet);
// logs 'map() starts'
// logs 'greet() called'
// logs 'map() completed'
Salin selepas log masuk

di mana greet() ialah panggilan balik segerak.

Langkah untuk menyegerakkan panggilan balik:

  • Pelaksanaan fungsi tertib lebih tinggi: 'map() starts'

  • Pelaksanaan fungsi panggilan balik: 'greet() called'

  • Akhirnya, fungsi tertib tinggi melengkapkan proses pelaksanaannya sendiri: 'map() completed'

Contoh panggilan balik segerak<.>

Banyak kaedah jenis JavaScript asli menggunakan panggilan balik segerak.

Kaedah yang paling biasa digunakan ialah tatasusunan, contohnya:

, array.map(callback), array.forEach(callback), array.find(callback), array.filter(callback)array.reduce(callback, init)

// Examples of synchronous callbacks on arrays
const persons = ['Ana', 'Elena'];

persons.forEach(
  function callback(name) {    console.log(name);
  }
);
// logs 'Ana'
// logs 'Elena'

const nameStartingA = persons.find(
  function callback(name) {    return name[0].toLowerCase() === 'a';
  }
);
nameStartingA; // => 'Ana'

const countStartingA = persons.reduce(
  function callback(count, name) {    const startsA = name[0].toLowerCase() === 'a';
    return startsA ? count + 1 : count;
  }, 
  0
);
countStartingA; // => 1
Salin selepas log masuk
Jenis rentetan

Kaedah juga boleh menerima panggilan balik yang dilaksanakan secara serentak: string.replace(callback)

// Examples of synchronous callbacks on strings
const person = 'Cristina';

// Replace 'i' with '1'
person.replace(/./g, 
  function(char) {    return char.toLowerCase() === 'i' ? '1' : char;
  }
); // => 'Cr1st1na'
Salin selepas log masuk

3 Panggilan balik tak segerak

Panggil balik tak segerak adalah "tidak menyekat": fungsi tertib tinggi tidak perlu. tunggu panggilan balik Selesai menyelesaikan pelaksanaannya. Fungsi tertib lebih tinggi memastikan panggilan balik kemudiannya dilaksanakan pada acara tertentu.

Dalam contoh berikut, pelaksanaan fungsi

ditangguhkan selama 2 saat: later()

console.log('setTimeout() starts');
setTimeout(function later() {
  console.log('later() called');
}, 2000);
console.log('setTimeout() completed');

// logs 'setTimeout() starts'
// logs 'setTimeout() completed'
// logs 'later() called' (after 2 seconds)
Salin selepas log masuk

ialah panggilan balik tak segerak kerana later() memulakan dan menyelesaikan pelaksanaan, Tetapi setTimeout(later,2000) dilaksanakan selepas 2 saat. later()

Langkah untuk memanggil panggilan balik secara tidak segerak:

  • Fungsi tertib tinggi mula dilaksanakan:

    'setTimeout()starts'

  • Fungsi tertib tinggi melengkapkan pelaksanaannya Perlaksanaan:

    'setTimeout() completed'

  • Fungsi panggil balik dilaksanakan selepas 2 saat:

    'later() called'

Contoh tak segerak panggil balik

Fungsi pemasa memanggil panggilan balik secara tak segerak:

setTimeout(function later() {
  console.log('2 seconds have passed!');
}, 2000);
// After 2 seconds logs '2 seconds have passed!' 

setInterval(function repeat() {
  console.log('Every 2 seconds');
}, 2000);
// Each 2 seconds logs 'Every 2 seconds!'
Salin selepas log masuk
Pendengar acara DOM juga memanggil pengendali acara (subjenis fungsi panggil balik) secara tidak segerak:

const myButton = document.getElementById('myButton');

myButton.addEventListener('click', function handler() {
  console.log('Button clicked!');
});
// Logs 'Button clicked!' when the button is clicked
Salin selepas log masuk

4. Fungsi panggil balik tak segerak dan fungsi tak segerak

Menambah kata kunci khas

sebelum definisi fungsi akan mencipta fungsi tak segerak: async

async function fetchUserNames() {
  const resp = await fetch('https://api.github.com/users?per_page=5');
  const users = await resp.json();
  const names = users.map(({ login }) => login);
  console.log(names);
}
Salin selepas log masuk

fetchUserNames() 是异步的,因为它以 async 为前缀。函数  await fetch('https://api.github.com/users?per_page=5') 从 GitHub 上获取前5个用户 。然后从响应对象中提取 JSON 数据:await resp.json()

异步函数是 promise 之上的语法糖。当遇到表达式 await <promise>  (调用  fetch()  会返回一个promise)时,异步函数会暂停执行,直到 promise 被解决。

异步回调函数和异步函数是不同的两个术语。

异步回调函数由高阶函数以非阻塞方式执行。但是异步函数在等待 promise(await <promise>)解析时会暂停执行。

但是你可以把异步函数用作异步回调!

让我们把异步函数 fetch UserNames() 设为异步回调,只需单击按钮即可调用:

const button = document.getElementById('fetchUsersButton');

button.addEventListener('click', fetchUserNames);
Salin selepas log masuk

总结

回调是一个可以作为参数传给另一个函数(高阶函数)执行的函数。

回调函数有两种:同步和异步。

  • 同步回调是阻塞的。

  • 异步回调是非阻塞的。

【相关推荐:javascript学习教程

Atas ialah kandungan terperinci Analisis mendalam fungsi panggil balik dalam JavaScript (segerak dan tak segerak). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menulis fungsi panggil balik java Bagaimana untuk menulis fungsi panggil balik java Jan 09, 2024 pm 02:24 PM

Kaedah menulis fungsi panggil balik java ialah: 1. Panggilan balik antara muka, tentukan antara muka, yang mengandungi kaedah panggil balik, gunakan antara muka sebagai parameter di mana panggilan balik perlu dicetuskan, dan panggil kaedah panggil balik pada masa yang sesuai 2. Panggilan balik kelas dalam tanpa nama , anda boleh menggunakan kelas dalam tanpa nama untuk melaksanakan fungsi panggil balik untuk mengelakkan daripada membuat kelas pelaksanaan tambahan 3. Panggilan balik ungkapan Lambda Dalam Java 8 dan ke atas, anda boleh menggunakan ungkapan Lambda untuk memudahkan penulisan fungsi panggil balik.

PHP dan Vue: gandingan sempurna alat pembangunan bahagian hadapan PHP dan Vue: gandingan sempurna alat pembangunan bahagian hadapan Mar 16, 2024 pm 12:09 PM

PHP dan Vue: gandingan sempurna alat pembangunan bahagian hadapan Dalam era perkembangan pesat Internet hari ini, pembangunan bahagian hadapan telah menjadi semakin penting. Memandangkan pengguna mempunyai keperluan yang lebih tinggi dan lebih tinggi untuk pengalaman tapak web dan aplikasi, pembangun bahagian hadapan perlu menggunakan alat yang lebih cekap dan fleksibel untuk mencipta antara muka yang responsif dan interaktif. Sebagai dua teknologi penting dalam bidang pembangunan bahagian hadapan, PHP dan Vue.js boleh dianggap sebagai alat yang sempurna apabila digandingkan bersama. Artikel ini akan meneroka gabungan PHP dan Vue, serta contoh kod terperinci untuk membantu pembaca memahami dan menggunakan kedua-dua ini dengan lebih baik.

Soalan yang sering ditanya oleh penemuduga front-end Soalan yang sering ditanya oleh penemuduga front-end Mar 19, 2024 pm 02:24 PM

Dalam temu bual pembangunan bahagian hadapan, soalan lazim merangkumi pelbagai topik, termasuk asas HTML/CSS, asas JavaScript, rangka kerja dan perpustakaan, pengalaman projek, algoritma dan struktur data, pengoptimuman prestasi, permintaan merentas domain, kejuruteraan bahagian hadapan, corak reka bentuk, dan teknologi dan trend baharu. Soalan penemuduga direka bentuk untuk menilai kemahiran teknikal calon, pengalaman projek dan pemahaman tentang trend industri. Oleh itu, calon harus bersedia sepenuhnya dalam bidang ini untuk menunjukkan kebolehan dan kepakaran mereka.

Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Jan 05, 2024 pm 06:08 PM

Tutorial JavaScript: Bagaimana untuk mendapatkan kod status HTTP, contoh kod khusus diperlukan: Dalam pembangunan web, interaksi data dengan pelayan sering terlibat. Apabila berkomunikasi dengan pelayan, kami selalunya perlu mendapatkan kod status HTTP yang dikembalikan untuk menentukan sama ada operasi itu berjaya dan melaksanakan pemprosesan yang sepadan berdasarkan kod status yang berbeza. Artikel ini akan mengajar anda cara menggunakan JavaScript untuk mendapatkan kod status HTTP dan menyediakan beberapa contoh kod praktikal. Menggunakan XMLHttpRequest

Adakah Django bahagian hadapan atau belakang? semaklah! Adakah Django bahagian hadapan atau belakang? semaklah! Jan 19, 2024 am 08:37 AM

Django ialah rangka kerja aplikasi web yang ditulis dalam Python yang menekankan pembangunan pesat dan kaedah bersih. Walaupun Django ialah rangka kerja web, untuk menjawab soalan sama ada Django ialah front-end atau back-end, anda perlu mempunyai pemahaman yang mendalam tentang konsep front-end dan back-end. Bahagian hadapan merujuk kepada antara muka yang pengguna berinteraksi secara langsung, dan bahagian belakang merujuk kepada program bahagian pelayan Mereka berinteraksi dengan data melalui protokol HTTP. Apabila bahagian hadapan dan bahagian belakang dipisahkan, program bahagian hadapan dan bahagian belakang boleh dibangunkan secara bebas untuk melaksanakan logik perniagaan dan kesan interaktif masing-masing, dan pertukaran data.

Sintaks asas dan aplikasi fungsi panggil balik dalam Java Sintaks asas dan aplikasi fungsi panggil balik dalam Java Jan 30, 2024 am 08:12 AM

Pengenalan kepada penulisan asas dan penggunaan fungsi panggil balik Java: Dalam pengaturcaraan Java, fungsi panggil balik adalah corak pengaturcaraan biasa Melalui fungsi panggil balik, kaedah boleh dihantar sebagai parameter kepada kaedah lain, dengan itu mencapai panggilan tidak langsung kaedah tersebut. Penggunaan fungsi panggil balik adalah sangat biasa dalam senario seperti didorong peristiwa, pengaturcaraan tak segerak dan pelaksanaan antara muka. Artikel ini akan memperkenalkan penulisan asas dan penggunaan fungsi panggil balik Java, dan memberikan contoh kod khusus. 1. Definisi fungsi panggil balik Fungsi panggil balik ialah fungsi khas yang boleh digunakan sebagai parameter

Meneroka teknologi bahagian hadapan bahasa Go: visi baharu untuk pembangunan bahagian hadapan Meneroka teknologi bahagian hadapan bahasa Go: visi baharu untuk pembangunan bahagian hadapan Mar 28, 2024 pm 01:06 PM

Sebagai bahasa pengaturcaraan yang pantas dan cekap, bahasa Go popular secara meluas dalam bidang pembangunan bahagian belakang. Walau bagaimanapun, beberapa orang mengaitkan bahasa Go dengan pembangunan bahagian hadapan. Malah, menggunakan bahasa Go untuk pembangunan bahagian hadapan bukan sahaja boleh meningkatkan kecekapan, tetapi juga membawa ufuk baharu kepada pembangun. Artikel ini akan meneroka kemungkinan menggunakan bahasa Go untuk pembangunan bahagian hadapan dan memberikan contoh kod khusus untuk membantu pembaca memahami dengan lebih baik bahagian ini. Dalam pembangunan front-end tradisional, JavaScript, HTML dan CSS sering digunakan untuk membina antara muka pengguna

Django: Rangka kerja ajaib yang boleh mengendalikan pembangunan bahagian hadapan dan belakang! Django: Rangka kerja ajaib yang boleh mengendalikan pembangunan bahagian hadapan dan belakang! Jan 19, 2024 am 08:52 AM

Django: Rangka kerja ajaib yang boleh mengendalikan pembangunan bahagian hadapan dan belakang! Django ialah rangka kerja aplikasi web yang cekap dan berskala. Ia mampu menyokong berbilang model pembangunan web, termasuk MVC dan MTV, dan boleh membangunkan aplikasi web berkualiti tinggi dengan mudah. Django bukan sahaja menyokong pembangunan bahagian belakang, tetapi juga boleh membina antara muka bahagian hadapan dengan cepat dan mencapai paparan paparan yang fleksibel melalui bahasa templat. Django menggabungkan pembangunan bahagian hadapan dan pembangunan bahagian belakang menjadi penyepaduan yang lancar, supaya pembangun tidak perlu pakar dalam pembelajaran

See all articles