javascript - Bagaimanakah fungsi panggil balik mengakses nilai di bawah fungsi semasa?
大家讲道理
大家讲道理 2017-05-16 13:35:48
0
4
561

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

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

membalas semua(4)
伊谢尔伦

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);
}
巴扎黑

Masukkan bookARR[i] dalam panggilan balik

左手右手慢动作

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

漂亮男人

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan