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