国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

理解javascript中的回調函數(callback)

2019-11-20 14:12:40
字體:
來源:轉載
供稿:網友

最近在看 express,滿眼看去,到處是以函數作為參數的回調函數的使用。如果這個概念理解不了,nodejs、express 的代碼就會看得一塌糊涂。比如:

復制代碼 代碼如下:

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 傳遞了什么參數就行了。然后在調用方法或函數時,在參數里我們自己定義匿名函數來完成某些功能。

Over!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 柳林县| 泽库县| 和顺县| 铜梁县| 丹凤县| 开远市| 永顺县| 古田县| 定西市| 龙游县| 本溪市| 驻马店市| 固镇县| 蓬溪县| 三穗县| 察隅县| 夹江县| 竹溪县| 读书| 定陶县| 施甸县| 卢龙县| 茂名市| 浦东新区| 张掖市| 五常市| 夏河县| 池州市| 康马县| 板桥市| 手机| 赤水市| 象州县| 冷水江市| 仁寿县| 盐城市| 崇礼县| 邵东县| 镇江市| 永嘉县| 攀枝花市|