Yükleniyor...

Callback fonksiyonları

Fincan bir paragraftır, #cup, ve blank ile başlar. Bu sayfada çaydanlık zamanlayıcısı yok.
serve bir sipariş ve bir işlev alır. O işlev callback’tir: sen verirsin, serve çağırır. Çağrı serve dönmeden olur, bu yüzden sonraki satır içeceği çoktan görmüştür. Satır lida tea / poured olur.

Bu çaydanlık değil

Önceki sayfa cold’u hemen, hot’u ancak 400 milisaniye sonra günlükledi. Satırı cold / hot / 3 idi. Zamanlayıcı bekler. serve beklemez. setTimeout arıyorsan yanlış tezgâhtasın.
Soru: verdiğin işlevi kim çağırır?

Parametre adı yalnızca bir addır

serve içinde parametrenin adı done’dur. Çağrı yerinde işlevin adı yoktur. serve adı umursamaz. Bir işlev aldığını ve onu tek argümanla çağırdığını umursar: sipariş artı tea sözcüğü.

Çağrı dönüşten önce olur

done(order + " tea") çalışır, fincan dolar, ancak ondan sonra serve biter. Çağrının altındaki günlük çoktan içecektir.

Bir işlev ver

javascript
function serve(order, done) {
done(order + " tea");
}
let cup = document.getElementById("cup");
serve("lida", function (drink) {
cup.textContent = drink;
});
console.log(cup.textContent);

Günlük lida tea. Fincan blank kalmadı ve bir şey beklemedi.

Çağrıyı unutmak

Bu serve içeceği kurar ve durur. done’u çağırmaz. Verdiğin işlev yerinde kalır. Fincan çağrıdan önce blank yapılmıştı ve blank kalır.

done’u çağırma

javascript
function serve(order, done) {
order = order + " tea";
}
let cup = document.getElementById("cup");
cup.textContent = "blank";
serve("lida", function (drink) {
cup.textContent = drink;
});
console.log(cup.textContent);

Günlük blank. Hata fırlatılmaz. Hiç çağrılmayan bir callback çalışmaz. İçecek dizisi kuruldu ve kimse teslim almadı.

İkinci işlev, birinciden sonra

serve iki işlev alabilir. Önce done’u içecekle çağırır. after’ı ancak o çağrı döndükten sonra çağırır. after içeceği almaz. Yalnızca dökmenin olduğunu işaretler.

done, sonra after

javascript
function serve(order, done, after) {
done(order + " tea");
after();
}
let seen = [];
serve(
"lida",
function (drink) {
seen.push(drink);
},
function () {
seen.push("poured");
}
);
console.log(seen.join(" / "));

Günlük lida tea / poured. serve içindeki iki çağrının yerini değiştirirsen sözcükler de değişir. Sıra çağrıların sırasıdır, işlev ifadelerini yazdığın sıra değil.

Sayfa neyi birleştirir

Sayfa ikinci serve’ü kullanır, done ve after olanı. İçeceği koyar, sonra poured’u, satırı yazar. Aralarında gecikme yoktur.

Fincanın altındaki satır

Betik body’nin sonundadır. serve iki işlevi satır birleşmeden önce çağırır.

Sayfa demosu — fincan

html
<!DOCTYPE html>
<html>
<head>
<title>serve-cup — page</title>
</head>
<body>
<p id="cup">blank</p>
<p id="line">…</p>
<script>
function serve(order, done, after) {
done(order + " tea");
after();
}
let seen = [];
serve(
"lida",
function (drink) {
seen.push(drink);
},
function () {
seen.push("poured");
}
);
document.getElementById("line").textContent = seen.join(" / ");
document.getElementById("cup").textContent = seen[0];
</script>
</body>
</html>

Satır lida tea / poured. Fincan lida tea gösterir. blank gitti. cold / hot / 3 önceki sayfadır.

Tezgâhta

  1. serve’e bir işlev ver ve içecekle çağırmasına bırak. Günlük lida tea.
  2. done’u hiç çağırmayan bir serve kullan. Günlük blank kalır.
  3. done ve after ver. Günlük lida tea / poured.
  4. Sayfa satırını oku: lida tea / poured.

Tezgâh hataları

Fincan bir içecek gösterir ya da blank kalır. Aralık sayacı göstermez.

  • done çağrılmışken serve altındaki günlüğün hâlâ blank olmasını beklemek
  • serve hiç çağırmazsa da callback’in çalışacağını sanmak
  • lida tea için 400 milisaniye beklemek
  • after’ı önce çağırıp poured’u içecekten öne koymak
  • Satırı cold / hot / 3 diye okumak

Bunu tut

  • Callback, başkası çağırsın diye verdiğin işlevdir
  • serve dönmeden done’u çağırır, bu yüzden sonraki satır lida tea’yi çoktan görmüştür
  • done hiç çağrılmazsa fincan blank kalır ve hata yoktur
  • after ancak done döndükten sonra çalışır
  • Sayfa satırı lida tea / poured

🧠 Bilginizi Test Edin

Başlamaya Hazır

Bilginizi Test Edin

Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör

❓
6
Sorular
🎯
70%
Geçmek İçin
♾️
∞
Süre
🔄
∞
Deneme

📝 Talimatlar

  • Her soruyu dikkatle okuyun
  • Her soru için en iyi cevabı seçin
  • Quiz'i istediğiniz kadar tekrar alabilirsiniz
  • İlerlemeniz üstte gösterilecek