最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

理解javascript中的回調(diào)函數(shù)(callback)

 更新時(shí)間:2014年09月02日 12:15:35   投稿:junjie  
這篇文章主要介紹了理解javascript中的回調(diào)函數(shù)(callback),本文著重于對(duì)回調(diào)函數(shù)概念的理解,需要的朋友可以參考下

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

復(fù)制代碼 代碼如下:

app.use(function(req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

app是對(duì)象,use是方法,方法的參數(shù)是一個(gè)帶參的匿名函數(shù),函數(shù)體直接在后面給出了。這段代碼怎么理解呢?我們先來(lái)了解回調(diào)函數(shù)這個(gè)概念。
首先要了解,在 js 中,函數(shù)也是對(duì)象,可以賦值給變量,可以作為參數(shù)放在函數(shù)的參數(shù)列表中。比如:
復(fù)制代碼 代碼如下:

var doSomething = function(a,b)
{
 return a + b;
}

這段代碼的意思是定義一個(gè)匿名函數(shù),這個(gè)匿名函數(shù)除了沒有名字之外,其他跟普通的函數(shù)沒有什么兩樣。然后把匿名函數(shù)賦值給變量doSomething。接下來(lái)我們調(diào)用:
復(fù)制代碼 代碼如下:

console.log(doSomething(2,3));

這樣會(huì)輸出5。

回調(diào)函數(shù),就是放在另外一個(gè)函數(shù)(如 parent)的參數(shù)列表中,作為參數(shù)傳遞給這個(gè) parent,然后在 parent 函數(shù)體的某個(gè)位置執(zhí)行。說(shuō)來(lái)抽象,看例子:

復(fù)制代碼 代碼如下:

// 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 函數(shù),有一個(gè)參數(shù) callback。這個(gè) callback 就是回調(diào)函數(shù),名字可以任意取??春瘮?shù)體,先定義三個(gè)變量 a,b,c。然后調(diào)用 callback 函數(shù)。最后返回一個(gè)值。

下面就調(diào)用 doit 函數(shù)了。要注意的是,剛才定義 doit 時(shí),callback 并沒有定義,所以剛才并不知道 callback 是干什么用的。這其實(shí)很好理解,我們平時(shí)定義函數(shù)的時(shí)候,參數(shù)也只是給出了一個(gè)名字,比如 a,在函數(shù)體中使用 a,但整個(gè)過(guò)程也并不知道 a 到底是什么,只有在調(diào)用那個(gè)函數(shù)的時(shí)候才指定 a 的具體值,比如2.回過(guò)頭來(lái),在調(diào)用 doit 的時(shí)候,我們就需要指定 callback 究竟是個(gè)什么東西了??梢钥吹剑@個(gè)函數(shù)完成了一個(gè) sum 功能。

上述代碼的執(zhí)行過(guò)程是:

調(diào)用 doit函數(shù),參數(shù)是一個(gè)匿名函數(shù);進(jìn)入 doit 的函數(shù)體中,先定義 a,b,c,然后執(zhí)行剛才的匿名函數(shù),參數(shù)是 a,b,c,并返回一個(gè) t,最后返回一個(gè) t+10給 d。

回到最初的例子,app.use(...)是函數(shù)調(diào)用。我們可以想象,之前一定定義了一個(gè) use 方法,只是這里沒有給出。這兩個(gè)例子一對(duì)比,就可以馬上理解了。

在使用nodejs、express 的時(shí)候,不可能每個(gè)方法或函數(shù)我們都要找到它的函數(shù)定義去看一看。所以只要知道那個(gè)定義里面給 callback 傳遞了什么參數(shù)就行了。然后在調(diào)用方法或函數(shù)時(shí),在參數(shù)里我們自己定義匿名函數(shù)來(lái)完成某些功能。

Over!

相關(guān)文章

  • 詳談js對(duì)url進(jìn)行編碼和解碼(三種方式的區(qū)別)

    詳談js對(duì)url進(jìn)行編碼和解碼(三種方式的區(qū)別)

    下面小編就為大家?guī)?lái)一篇詳談js對(duì)url進(jìn)行編碼和解碼(三種方式的區(qū)別)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • express+mockjs實(shí)現(xiàn)模擬后臺(tái)數(shù)據(jù)發(fā)送功能

    express+mockjs實(shí)現(xiàn)模擬后臺(tái)數(shù)據(jù)發(fā)送功能

    這篇文章主要介紹了express+mockjs實(shí)現(xiàn)模擬后臺(tái)數(shù)據(jù)發(fā)送功能,需要的朋友可以參考下
    2018-01-01
  • 微信小程序如何獲取手機(jī)驗(yàn)證碼

    微信小程序如何獲取手機(jī)驗(yàn)證碼

    這篇文章主要為大家詳細(xì)介紹了微信小程序如何獲取手機(jī)驗(yàn)證碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • 微信小程序中如何實(shí)現(xiàn)動(dòng)態(tài)改變SVG顏色和尺寸

    微信小程序中如何實(shí)現(xiàn)動(dòng)態(tài)改變SVG顏色和尺寸

    SVG可被非常多的工具讀取和修改SVG與JPEG和GIF圖像比起來(lái),尺寸更小,且可壓縮性更強(qiáng),下面這篇文章主要給大家介紹了關(guān)于微信小程序中如何實(shí)現(xiàn)動(dòng)態(tài)改變SVG顏色和尺寸的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • event.srcElement 用法筆記e.target

    event.srcElement 用法筆記e.target

    event.srcElement 可以捕獲當(dāng)前事件作用的對(duì)象,如event.srcElement.tagName可以捕獲活動(dòng)標(biāo)記名稱。
    2009-12-12
  • JavaScript中的

    JavaScript中的"=、==、==="區(qū)別講解

    今天小編就為大家分享一篇關(guān)于JavaScript中的"=、==、==="區(qū)別講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • 深入探討JavaScript中Class的語(yǔ)法與使用

    深入探討JavaScript中Class的語(yǔ)法與使用

    這篇文章將帶大家深入探討 class 在 JavaScript 中的作用、語(yǔ)法和使用方法,并與 ES5 構(gòu)造函數(shù)進(jìn)行對(duì)比,希望可以幫助大家更好地理解和應(yīng)用類的概念
    2023-06-06
  • 了解一點(diǎn)js的Eval函數(shù)

    了解一點(diǎn)js的Eval函數(shù)

    之前只知道eval可以解析字符串,剛剛網(wǎng)上看了又了解了一點(diǎn),這里貼出來(lái),不懂的也看看哈
    2012-07-07
  • JavaScript中深拷貝與淺拷貝詳解

    JavaScript中深拷貝與淺拷貝詳解

    大家好,本篇文章主要講的是JavaScript中深拷貝與淺拷貝詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • JSONP解決JS跨域問題的實(shí)現(xiàn)

    JSONP解決JS跨域問題的實(shí)現(xiàn)

    這篇文章主要介紹了JSONP解決JS跨域問題的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評(píng)論

安溪县| 马尔康县| 武义县| 西乌珠穆沁旗| 新源县| 华蓥市| 柳江县| 师宗县| 桂东县| 五莲县| 平舆县| 沛县| 安溪县| 赤峰市| 轮台县| 德兴市| 大悟县| 当涂县| 金川县| 兴城市| 洛扎县| 苍山县| 莫力| 钟祥市| 庆阳市| 长兴县| 罗平县| 永康市| 南昌县| 隆林| 泗洪县| 新建县| 保靖县| 孟连| 瓦房店市| 台南县| 海兴县| 苏州市| 逊克县| 普陀区| 三门县|