callback回調(diào)函數(shù) 怎樣區(qū)分回調(diào)函數(shù)與普通函數(shù)?
怎樣區(qū)分回調(diào)函數(shù)與普通函數(shù)?普通函數(shù)與回調(diào)函數(shù)的區(qū)別:調(diào)用普通函數(shù):調(diào)用程序調(diào)用普通函數(shù)后,程序執(zhí)行立即轉(zhuǎn)為被調(diào)用函數(shù)執(zhí)行,然后返回調(diào)用程序繼續(xù)執(zhí)行,直到被調(diào)用函數(shù)執(zhí)行為止。從調(diào)用程序的角度看,這個(gè)過(guò)
怎樣區(qū)分回調(diào)函數(shù)與普通函數(shù)?
普通函數(shù)與回調(diào)函數(shù)的區(qū)別:調(diào)用普通函數(shù):調(diào)用程序調(diào)用普通函數(shù)后,程序執(zhí)行立即轉(zhuǎn)為被調(diào)用函數(shù)執(zhí)行,然后返回調(diào)用程序繼續(xù)執(zhí)行,直到被調(diào)用函數(shù)執(zhí)行為止。從調(diào)用程序的角度看,這個(gè)過(guò)程是“call-->等待被調(diào)用函數(shù)執(zhí)行完畢-->繼續(xù)執(zhí)行”調(diào)用回調(diào)函數(shù):調(diào)用程序調(diào)用回調(diào)函數(shù)后,不等待函數(shù)執(zhí)行完畢,而是立即返回并繼續(xù)執(zhí)行。這樣,調(diào)用程序和被調(diào)用函數(shù)被同時(shí)執(zhí)行。當(dāng)被調(diào)用函數(shù)完成時(shí),被調(diào)用函數(shù)將依次調(diào)用預(yù)先指定的函數(shù),通知調(diào)用程序函數(shù)調(diào)用結(jié)束。這個(gè)過(guò)程稱為回調(diào),它是回調(diào)函數(shù)名稱的來(lái)源。
回調(diào)函數(shù)是如何調(diào)用的呢?
事件驅(qū)動(dòng)是概念,回調(diào)函數(shù)是實(shí)現(xiàn)方式。
無(wú)需回調(diào)函數(shù)即可實(shí)現(xiàn)事件驅(qū)動(dòng)。
例如:要向隊(duì)列發(fā)送事件消息,另一個(gè)進(jìn)程可以接收隊(duì)列進(jìn)行處理(沒(méi)有回調(diào)函數(shù))。
事件驅(qū)動(dòng)的基本特性:中央輪詢機(jī)制。
事件循環(huán)的循環(huán)正在輪詢。
輪詢的目的是什么?感知
!當(dāng)對(duì)象發(fā)生變化時(shí),如何感知變化?
連續(xù)循環(huán)查詢,循環(huán)檢測(cè)
!系統(tǒng)n個(gè)對(duì)象,每個(gè)對(duì)象都有一個(gè)for循環(huán)來(lái)檢測(cè)彼此的更改?
nonono……
建立一個(gè)輪詢中心來(lái)輪詢每個(gè)對(duì)象,稱為事件驅(qū)動(dòng)。
如果有變化,通知相關(guān)方。怎么處理?是定義一個(gè)回調(diào)函數(shù)。
事件驅(qū)動(dòng),屬于“感知層”的概念;
輪詢中心通常是操作系統(tǒng)本身;
對(duì)于瀏覽器,它是瀏覽器本身。
換句話說(shuō),系統(tǒng)是輪詢中心,
您定義函數(shù),系統(tǒng)調(diào)用您定義的函數(shù)。
對(duì)比:系統(tǒng)定義的API,您調(diào)用API。
誰(shuí)定義函數(shù),誰(shuí)調(diào)用,角色顛倒
!API:系統(tǒng)定義的函數(shù),由您調(diào)用;
事件驅(qū)動(dòng):由您定義的回調(diào)函數(shù),由系統(tǒng)調(diào)用。
還是不明白?
事件驅(qū)動(dòng)是“哨兵模式”
!Sentinel輪詢環(huán)境信息,你睡得好,不是每個(gè)人都輪詢環(huán)境。Sentinel(OS/Browser/polling center)負(fù)責(zé)通知您一個(gè)事件!如何處理這則新聞是你的責(zé)任
!給你