使用高階函數 可以做出很多powerful的事請 例如異步編程 所謂異步 舉個栗子就像https://www.zhihu.com/question/19732473所說的
老張愛喝茶,廢話不說,煮開水。
出場人物:老張,水壺兩把(普通水壺,簡稱水壺;會響的水壺,簡稱響水壺)。
1 老張把水壺放到火上,立等水開。(同步阻塞)老張覺得自己有點傻
2 老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。(同步非阻塞)老張還是覺得自己有點傻,於是變高端了,買了把會響笛的那種水壺。水開之後,能大聲發出嘀~~~~的噪音。
3 老張把響水壺放到火上,立等水開。(異步阻塞)老張覺得這樣傻等意義不大
4 老張把響水壺放到火上,去客廳看電視,水壺響之前不再去看它了,響了再去拿壺。(異步非阻塞)
老張覺得自己聰明了。
這種「不會馬上回傳」的性質,在某些更新頻繁且大量的情況下很有用.就例如ajax,如果一個網站有大量資料且前後相關,一般的逐頁搜索會很沒效率而且很不方便.但如果可以用一些簡單操作逐批資料加載 整個網站就變得人性化多了
至於異步要如何控制呢,這就是我要今天記下的題目:Continuation-passing style(CPS)
所謂CPS 顧名思義就是一種編程的style 在這種style底下 每個動作都會回傳一個函數 這個函數會呼叫下個函數直至動作完結 這個呼叫的函數大多是呼叫他的父函數自身 形成一種連續的時間線 著名的函數式語言Haskell在發明初期都是用CPS處理I/O 以下是一個node.js呼叫sqlite例子