国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

關(guān)于js的回調(diào)、同步回調(diào)、異步回調(diào)

BakerJ / 2174人閱讀

摘要:回調(diào)定義剛開始學(xué)習(xí)時,對回調(diào)函數(shù)的理解僅僅停留在知道定義階段。什么是回調(diào)函數(shù)就是將一個函數(shù)作為參數(shù)傳遞給另一個函數(shù),作為參數(shù)的這個函數(shù)就是回調(diào)函數(shù)。參考文章詳解回調(diào)函數(shù)以為例解讀異步回調(diào)和異步編程的種方法阮一峰的網(wǎng)絡(luò)日志

回調(diào)定義

剛開始學(xué)習(xí)javascript時,對回調(diào)函數(shù)的理解僅僅停留在知道定義階段。什么是回調(diào)函數(shù)? 就是將一個函數(shù)作為參數(shù)傳遞給另一個函數(shù),作為參數(shù)的這個函數(shù)就是回調(diào)函數(shù)。 至于為什么要用到回調(diào)函數(shù)?回調(diào)函數(shù)有什么作用? 當(dāng)時對這些一無所知! 最近學(xué)習(xí)node.js涉及到了大量的異步編程,很多地方都需要用到回調(diào)函數(shù),所以這兩天深入了解了JavaScript的回調(diào)函數(shù),下面是我對回調(diào)函數(shù)的理解。

函數(shù)也是對象

想要弄明白js回調(diào)函數(shù),首先要清楚函數(shù)的規(guī)則,在javascript中函數(shù)是一個對象,準(zhǔn)確的來說函數(shù)是用function()構(gòu)造函數(shù)創(chuàng)建的一個function對象,因此我們可以將函數(shù)存儲在變量中,當(dāng)然也就可以將存儲在變量中的函數(shù)作為一個參數(shù)傳遞給另一個函數(shù),這就是回調(diào)函數(shù)。
舉個例子:

var callback = function(arg3) {
    console.log("callback Totle is:" + arg3)
  }

function fn(arg1, arg2, cb) {
  var Total = arg1 + arg2;
  cb(Total);
  console.log("mainFunction Totle is:" + Total)
}

fn(2, 2, callback)   // 調(diào)用fn()函數(shù),并傳入2, 2, callback作為參數(shù)

上面例子中我們將一個匿名函數(shù)賦值給變量callback,同時將callback作為參數(shù)傳遞給了fn()函數(shù),這時在函數(shù)fn()中callback就是回調(diào)函數(shù)。

同步回調(diào)和異步回調(diào)

上面的代碼執(zhí)行結(jié)果為:

callback Totle is:4
mainFunction Totle is:4

不對啊! 回調(diào)函數(shù)不是應(yīng)該在主函數(shù)的最后執(zhí)行嗎?
對,很多介紹回調(diào)函數(shù)的例子講到這里是就完了,異步回調(diào)函數(shù)的確是應(yīng)該在函數(shù)的最后執(zhí)行,不過上面的例子是一個同步回調(diào)函數(shù),函數(shù)的執(zhí)行順序依然自上而下順序執(zhí)行。 那么什么是異步回調(diào)呢? 我們又怎么實(shí)現(xiàn)異步回調(diào)呢? 下面我們舉兩個例子來說明:

示例1:

function f2() {

    console.log("f2 finished") 
}

function f1(cb) {

    setTimeout(cb,1000)        //用setTimeout()模擬耗時操作
    console.log("f1 finished")
}

f1(f2);    //得到的結(jié)果是 f1 finished ,f2 finished

這里我們用setTimeout()來模擬耗時操作的前提是js中的setTimeout()函數(shù)支持異步處理,所以我們得到的結(jié)果是 f1 finished ,f2 finished

示例2:

var fs = require("fs");

fs.readFile("input.txt","utf-8", function (err, data) {
    if (err) return console.error(err);
    console.log(data.toString());
});

console.log("程序執(zhí)行結(jié)束!");

程序執(zhí)行的結(jié)果是:

$ node app
程序執(zhí)行結(jié)束!
我們來測試一下異步回調(diào)函數(shù)

上面例子中我們先創(chuàng)建了一個文件input.txt,里面的內(nèi)容是:"我們來測試一下異步回調(diào)函數(shù)"
如果按照同步的思維,程序應(yīng)該執(zhí)行fs.readFile,直到文件讀完之后才執(zhí)行后面的console.log("程序執(zhí)行結(jié)束!"); 然而node中的fs.readFile是支持異步處理的,因此程序執(zhí)行到這兒的時候并不會阻塞,而是繼續(xù)向后執(zhí)行,當(dāng)文件讀取完畢之后再自動調(diào)用傳入的匿名回調(diào)函數(shù),因此出現(xiàn)了上面的結(jié)果。

參考文章:
詳解回調(diào)函數(shù)——以JS為例解讀異步、回調(diào)和EventLoop http://blog.csdn.net/tywinsta...
Javascript異步編程的4種方法 - 阮一峰的網(wǎng)絡(luò)日志http://www.ruanyifeng.com/blo...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/82961.html

相關(guān)文章

  • 同步異步異步回調(diào)

    摘要:同步與異步以上為同步代碼,函數(shù)必須等函數(shù)執(zhí)行完畢后才能執(zhí)行。異步回調(diào)產(chǎn)生的結(jié)果就是,函數(shù)的調(diào)用并不直接返回結(jié)果,而往往是交給回調(diào)函數(shù)進(jìn)行異步處理。 同步與異步: function a(){} function b(){} a(); b(); 以上為同步代碼,函數(shù)b必須等函數(shù)a執(zhí)行完畢后才能執(zhí)行。 function a(){ ...

    dinfer 評論0 收藏0
  • JS基礎(chǔ)——異步回調(diào)

    摘要:回調(diào)大多出現(xiàn)在請求,用于處理收到的請求結(jié)果。回調(diào)函數(shù)和異步一開始我被回調(diào)和異步有點(diǎn)搞暈了。異步編程的實(shí)現(xiàn)就我目前知道兩種回調(diào)函數(shù)和事件監(jiān)聽,其實(shí)看了阮神的異步編程的文章和下面的評論之后得出的理解。為了不影響的執(zhí)行,我們可以把寫成的回調(diào)函數(shù)。 前言 一個剛?cè)肭岸说男〔耍m然以前看到過關(guān)于回調(diào)的文章,但是呢,理解起來有點(diǎn)費(fèi)勁啊。當(dāng)時的腦海里就一個概念。 回調(diào):大多出現(xiàn)在Ajax請求,用于處...

    tianhang 評論0 收藏0
  • 由setTimeout深入JavaScript執(zhí)行環(huán)境異步機(jī)制

    摘要:圖片轉(zhuǎn)引自的演講和兩個定時器中回調(diào)的執(zhí)行邏輯便是典型的機(jī)制。異步編程關(guān)于異步編程我的理解是,在執(zhí)行環(huán)境所提供的異步機(jī)制之上,在應(yīng)用編碼層面上實(shí)現(xiàn)整體流程控制的異步風(fēng)格。 問題背景 在一次開發(fā)任務(wù)中,需要實(shí)現(xiàn)如下一個餅狀圖動畫,基于canvas進(jìn)行繪圖,但由于對于JS運(yùn)行環(huán)境中異步機(jī)制的不了解,所以遇到了一個棘手的問題,始終無法解決,之后在與同事交流之后才恍然大悟。問題的根節(jié)在于經(jīng)典的J...

    codeGoogle 評論0 收藏0
  • JS異步編程之callback

    摘要:而異步則是相反,調(diào)用在發(fā)出之后,這個調(diào)用就直接返回了,所以沒有返回結(jié)果而是在調(diào)用發(fā)出后,被調(diào)用者通過狀態(tài)通知來通知調(diào)用者,或通過回調(diào)函數(shù)處理這個調(diào)用。總結(jié)回調(diào)函數(shù)是異步編程中的基石,但同時也存在很多問題,不太適合人類自然語言的線性思維習(xí)慣。 為什么 JS 是單線程? 眾所周知,Javascript 語言的執(zhí)行環(huán)境是單線程(single thread)。 所謂單線程,就是指一次只能完成一...

    superw 評論0 收藏0
  • 解析關(guān)于JavaScript事件循環(huán)同步任務(wù)與異步任務(wù)

      學(xué)習(xí)一門知識,有些內(nèi)容必須要提前明白,比如在學(xué)習(xí)js中同步異步的問題前,需要明白,js是單線程的,為什么它得是單線程的呢?現(xiàn)在先從它應(yīng)用的場景來說,就是用來讓用戶與頁面進(jìn)行交互的吧。假如有js是多線程的,那在這個線程里面,用戶點(diǎn)擊某個按鈕會增加一個DOM節(jié)點(diǎn),在另一個線程里面,用戶點(diǎn)擊這個按鈕又會刪除一個DOM節(jié)點(diǎn),那么此時js就不知道該聽誰的了。這就是為什么會出現(xiàn)同步異步。假設(shè)沒有異步,那么...

    3403771864 評論0 收藏0

發(fā)表評論

0條評論

BakerJ

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<