最近在看 express,滿眼看去,到處是以函數作為參數的回調函數的使用。如果這個概念理解不了,nodejs、express 的代碼就會看得一塌糊涂。比如:
這樣會輸出5。
回調函數,就是放在另外一個函數(如 parent)的參數列表中,作為參數傳遞給這個 parent,然后在 parent 函數體的某個位置執行。說來抽象,看例子:
下面就調用 doit 函數了。要注意的是,剛才定義 doit 時,callback 并沒有定義,所以剛才并不知道 callback 是干什么用的。這其實很好理解,我們平時定義函數的時候,參數也只是給出了一個名字,比如 a,在函數體中使用 a,但整個過程也并不知道 a 到底是什么,只有在調用那個函數的時候才指定 a 的具體值,比如2.回過頭來,在調用 doit 的時候,我們就需要指定 callback 究竟是個什么東西了??梢钥吹?,這個函數完成了一個 sum 功能。
上述代碼的執行過程是:
調用 doit函數,參數是一個匿名函數;進入 doit 的函數體中,先定義 a,b,c,然后執行剛才的匿名函數,參數是 a,b,c,并返回一個 t,最后返回一個 t+10給 d。
回到最初的例子,app.use(...)是函數調用。我們可以想象,之前一定定義了一個 use 方法,只是這里沒有給出。這兩個例子一對比,就可以馬上理解了。
在使用nodejs、express 的時候,不可能每個方法或函數我們都要找到它的函數定義去看一看。所以只要知道那個定義里面給 callback 傳遞了什么參數就行了。然后在調用方法或函數時,在參數里我們自己定義匿名函數來完成某些功能。
Over!
新聞熱點
疑難解答