cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Bagaimanakah fungsi panggil balik mengakses nilai di bawah fungsi semasa?

Saya menentukan pembolehubah tatasusunan dalam fungsi, yang mengandungi 6 elemen, dan kemudian dipanggil fungsi panggil balik dalam fungsi Nilai pembolehubah tatasusunan tidak boleh diakses dalam fungsi panggil balik, tetapi atribut panjang boleh diakses. Saya berasa sangat keliru dan tidak tahu bagaimana untuk menyelesaikannya.

for(var i=0;i<bookARR.length;i++){//在该书中写入 有借图书馆id
                //因为图书馆表需要所有书籍的_id,所以检测有时,记录id
                console.log("在外面"+bookARR[i]);//9787539989891 9787533946777 9787569914078 9787513316286 9787218113180 9787535491978
                 Book.getBookByISBN(bookARR[i],function(err,book){
                    if(!book||err){
                        console.log("huidiao"+bookARR.length);//6
                        console.log("在里面"+bookARR[i]);//undefined undefined undefined undefined undefined undefined
                        newBook.push(bookARR[i]);
                    }else{
                        newBook_id.push(book._id);
                    }
                    ep.emit('examine');
                })
            }

Book.getBookByISBN() ialah fungsi yang saya takrifkan dalam modul lain

大家讲道理大家讲道理2830 hari yang lalu607

membalas semua(4)saya akan balas

  • 伊谢尔伦

    伊谢尔伦2017-05-16 13:37:48

    Sebab

    for (var i = 0; i<10; i++) {
       setTimeout(function(){console.log(i)});
    }
    
    for (var i = 0; i<10; i++) {
        (function(i){
           setTimeout(function(){console.log(i)});
        })(i)
    }

    Jadi

    for(var i=0;i<bookARR.length;i++){
        (function(i) {
            Book.getBookByISBN(bookARR[i],function(err,book){
                if(!book||err){
                    console.log("huidiao"+bookARR.length)
                    console.log("在里面"+bookARR[i]);
                    newBook.push(bookARR[i]);
                }else{
                    newBook_id.push(book._id);
                }
                ep.emit('examine');
            })
        })(i);
    }
    

    balas
    0
  • 巴扎黑

    巴扎黑2017-05-16 13:37:48

    Masukkan bookARR[i] dalam panggilan balik

    balas
    0
  • ringa_lee

    ringa_lee2017-05-16 13:37:48

    Alasannya telah disebut sebelum ini, ia hanya untuk lulus dalam bookArr[i] di mana anda mentakrifkan panggilan balik dalam fungsi Book.getBookByISBN() Fahami parameter formal dan parameter sebenar

    balas
    0
  • 漂亮男人

    漂亮男人2017-05-16 13:37:48

    Ini adalah masalah tak segerak biasa, dan skop i masih berada di dalamnya.
    Kerana saya menunggu awak secara tidak segerak getBookByISBN 方法调用callback的时候 i=bookARR.length。这已经越界了,所以是undefined.

    Penyelesaian:
    1. Penutupan
    2.biarkan

    balas
    0
  • Batalbalas