cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Apakah perbezaan antara fungsi panggil balik dan fungsi panggilan biasa?

Definasi fungsi panggil balik adalah untuk menghantar fungsi b sebagai parameter kepada a untuk pelaksanaan Pada masa ini, b ialah fungsi panggil balik tiba-tiba saya mempunyai soalan, apakah perbezaan antara ia dan memanggil b secara langsung dalam fungsi a.
Saya menulis demo sendiri

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

Ia akan mengambil masa kira-kira 3 saat untuk melihat hasil output, dan kemudian menulisnya semula dalam bentuk fungsi panggil balik

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

Hasil keluaran hanya boleh dilihat selepas 3 saat
Saya telah menjumpai banyak artikel, yang semuanya menjelaskan bahawa apabila b dilaksanakan sebagai fungsi panggil balik fungsi a, ia tidak menghalang perlaksanaan biasa fungsi a , kaedah kedua hendaklah serta-merta Apabila ia mengeluarkan hello world, adakah ia kerana saya menggunakan fungsi panggil balik yang salah? Masih mengalami masalah untuk memahami?

欧阳克欧阳克2709 hari yang lalu1398

membalas semua(2)saya akan balas

  • 淡淡烟草味

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

    1. Tiada perbezaan dalam prestasi
    2 Fungsi panggil balik diluluskan sebagai parameter, dan operasi lebih fleksibel Contohnya, anda boleh mentakrifkan fungsi c, yang boleh dijalankan
    b(c), apabila anda jalankan fungsi dalam fungsi, Fleksibiliti pembolehubah hilang.

    balas
    0
  • 漂亮男人

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

    Nah, anda salah faham, kesan panggilan adalah sama. Dan callback.call(this); 画蛇添足,跟 callback() ini adalah sama.

    Kelebihan panggilan balik ialah penyongsangan kebergantungan Anda boleh membiarkan panggilan c, d, e tanpa mengubah suai kod a...

    balas
    0
  • Batalbalas