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.
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.
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.
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.
<!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
serve’e bir işlev ver ve içecekle çağırmasına bırak. Günlük lida tea.done’u hiç çağırmayan birservekullan. Günlük blank kalır.doneveafterver. Günlük lida tea / poured.- 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ışkenservealtındaki günlüğün hâlâ blank olmasını beklemekservehiç ç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
servedönmedendone’u çağırır, bu yüzden sonraki satır lida tea’yi çoktan görmüştürdonehiç çağrılmazsa fincan blank kalır ve hata yokturafterancakdonedöndükten sonra çalışır- Sayfa satırı lida tea / poured
🧠 Bilginizi Test Edin
Bilginizi Test Edin
Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör
📝 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