javascript - 回调函数如何访问当前函数作用下的值

查看:98
本文介绍了javascript - 回调函数如何访问当前函数作用下的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

我在函数中定义了一个数组变量,里面存有6个元素,然后在该函数中调用回调函数,在回调函数中无法访问数组变量的值,但是可以访问length属性。感觉很迷惑,不知道该怎么解决。

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()是我在其他模块定义的函数

解决方案

因为

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)
}

所以

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);
}

这篇关于javascript - 回调函数如何访问当前函数作用下的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆