Javascript中的回撥函式
阿新 • • 發佈:2018-12-27
參考文章:https://www.zhihu.com/question/19801131/answer/91780287
A “callback” is any function that is called by another function which takes the first function as a parameter. (在一個函式中呼叫另外一個函式就是callback)
function callback() { alert("I am in the callback!"); } function work(func) { alert("I am calling the callback!"); func(); } work(callback);
這就是一個很簡單的callback
callback 作為一個變數傳入函式work 中 在work 中被呼叫
然後來說一下callback經常的使用場景:
A lot of the time, a “callback” is a function that is called when something happens. That something can be called an “event” in programmer-speak.(很多時候 callback 都是用來執行事件驅動的任務 比如有貨了通知我 | 你到家了再叫我做飯 等等之類的 )
舉個簡單的例子 對一個檔案的讀入
如果不用callback
fileObject = open(file)
#我們必須等到檔案開啟才能進行讀入 在這之前我們不能做其他事情
fileObject.write("We are writing to the file.")
使用callback
# 我們把writeToFile 為一個function 傳入open writeToFile就是一個callback function fileObject = open(file, writeToFile) # 我們不需要一直等著這個檔案開啟 # 檔案開啟的時候 他就會執行callback 也就是writeToFile(具體實現 可以用promise) 在這之前我們可以做其他事情
注:使用回撥時候,我們把open和write寫在了一起,這樣就不用等open完再呼叫write了,這樣我們就省去一步,open完就回調write。所以我們在open的時候就可以去做另外的事,比如open第二本書,因為open第一本書的時候,我們會自動回撥write。
另一個角度思考,回撥函式可以幫我們確保某些程式碼執行順序,某些程式碼直到另一些程式碼已經執行完畢才執行。
完整例項程式碼:
function openFile(filePath,callback){
alert('start opening file in'+filePath);
callback();//when finished,execute callback()
}
function writeToFile(){
alert('i'm now writing file');
}
openFile('c://test.csv',writeToFile);