2025-02-18-callback_生活化例子
以下是 一個生活化又簡單的例子,幫助你理解什麼是 callback,還有什麼叫 callback hell(回呼地獄)。
🧁 情境例子:媽媽叫你幫忙做蛋糕
你幫媽媽做蛋糕要經過三個步驟:
- 買材料
- 打蛋混合
- 放進烤箱
這些步驟都不能同時做,必須一個做完再做下一個。
✅ 使用 callback 的寫法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| function buyIngredients(callback) { setTimeout(() => { console.log('🛒 材料買好了!') callback() }, 1000) }
function mixIngredients(callback) { setTimeout(() => { console.log('🥣 材料攪拌好了!') callback() }, 1000) }
function bake(callback) { setTimeout(() => { console.log('🔥 蛋糕烤好了!') callback() }, 1000) }
buyIngredients(() => { mixIngredients(() => { bake(() => { console.log('🎉 蛋糕完成,可以吃了!') }) }) })
|
📌 說明
- 每一個步驟都透過 callback 告訴下一個步驟「我好了,換你」。
- 但 callback 一層又一層,就會像這樣:
1 2 3 4 5 6 7
| 買材料(() => { 攪拌(() => { 烘烤(() => { 完成() }) }) })
|
這看起來已經有點複雜了,如果還要再加「切蛋糕、包裝、送人」… 會變成這樣:
1 2 3 4 5 6 7 8 9 10 11 12 13
| 買材料(() => { 攪拌(() => { 烘烤(() => { 切蛋糕(() => { 包裝(() => { 送人(() => { console.log('完成所有任務') }) }) }) }) }) })
|
😵 看起來是不是有點像「無限 callback」?這就是我們說的 callback hell。
🧠 重點總結
- callback:就是「做完某件事,通知我去做下一件事」的函式。
- callback hell:就是「太多 callback 巢狀在一起」,程式越寫越難讀。