1. 程式人生 > >Javascript中的回撥函式

Javascript中的回撥函式

參考文章: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);