搜尋

首頁  >  問答  >  主體

javascript - 回呼函數和普通呼叫函數的差別?

回呼函數的定義是將b函數當作參數傳給a去執行,此時b就是回呼函數,我突然有個疑問,它和a函數裡直接呼叫b有什麼差別呢?
我自己寫了個demo

function a(){
    b();
    console.log('hello world');
}
function b(){
    var n = 0;
    for(var i = 0;i < 1000000000;i++){
        n++;
    }
    return n;
}
a(); //hello world

大概3秒鐘才能看到輸出結果,然後改寫成回呼函數的形式

function a(callback){
    callback.call(this);
    console.log('hello world');
}
function b(){
    var n = 0;
    for(var i = 0;i < 1000000000;i++){
    }
    console.log(1);
}
a(b); //hello world

也是3秒後才能看到輸出結果
找了很多文章,都說明了當b作為a函數的回調函數執行時,並不妨礙a函數的正常執行,按照這個邏輯,第二種方式應該是立即輸出hello world的,難道是我回呼函數用錯了嗎?還是理解有問題?

欧阳克欧阳克2786 天前1460

全部回覆(2)我來回復

  • 淡淡烟草味

    淡淡烟草味2017-06-26 10:55:07

    1.性能沒有區別
    2.回調函數是作為參數傳遞的,操作更加靈活,比如,你可以定義一個函數c,那可以運行
    b(c),當你在函數內運行函數的時候,就失去了變數的靈活性。

    回覆
    0
  • 漂亮男人

    漂亮男人2017-06-26 10:55:07

    嗯,是你理解錯了,呼叫的效果是一樣的。還有 callback.call(this); 畫蛇添足,跟 callback() 的 this 是一樣的。

    回呼的好處是依賴倒置,不用修改 a 的程式碼就可以讓 a 呼叫 c、d、e....

    回覆
    0
  • 取消回覆