javascript中的回調函數(callback) (轉載)

代碼以下:
app.use(function(req, res, next) {     var err = new Error('Not Found');     err.status = 404;     next(err); });
app是對象,use是方法,方法的參數是一個帶參的匿名函數,函數體直接在後面給出了。這段代碼怎麼理解呢?咱們先來了解回調函數這個概念。 首先要了解,在 js 中,函數也是對象,能夠賦值給變量,
能夠做爲參數放在函數的參數列表中。好比: 代碼以下: var doSomething = function(a,b) { return a + b; } 這段代碼的意思是定義一個匿名函數,這個匿名函數除了沒有名字以外,其餘跟普通的函數沒有什麼兩樣。而後把匿名函數賦值給變量doSomething。接下來咱們調用: 代碼以下: console.log(doSomething(2,3)); 這樣會輸出5。 回調函數,就是放在另一個函數(如 parent)的參數列表中,做爲參數傳遞給這個 parent,而後在 parent 函數體的某個位置執行。說來抽象,看例子: 代碼以下: // To illustrate the concept of callback var doit = function(callback) { var a = 1, b = 2, c = 3; var t = callback(a,b,c); return t + 10; }; var d = doit(function(x,y,z){ return (x+y+z); }); console.log(d); 先定義 doit 函數,有一個參數 callback。這個 callback 就是回調函數,名字能夠任意取。看函數體,先定義三個變量 a,b,c。而後調用 callback 函數。最後返回一個值。 下面就調用 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 傳遞了什麼參數就好了。而後在調用方法或函數時,在參數裏咱們本身定義匿名函數來完成某些功能。
相關文章
相關標籤/搜索