所有人。
我对“回调函数-变量范围”有问题,
我想用'i in for loop'来'callback函数user\u uidsearch',
但我不能用它。
(我希望解决方案不要使用全局变量。)

Task_TidSearchExecution = function(tid, callback) {
    var sql = "SELECT * FROM execution WHERE task = '" + tid + "'";
    dbclient.query(sql, function (err, results) {
        if (err || results.length <= 0)
            callback(false);
        else {
            console.log(results.length);
            for (var i = 0 ; i < results.length ; i++) {
                User_UidSearch(results[i].employee, function (user) {
                    console.log(i);
                    // results[i]['email'] = user.email;
                });
            }

            callback(results);
        }
    });
}

“console.log(i);”
再检查一下,这是错误的。->所有输出都是“未定义”的。
未定义为“console.log(result[i]);”
但如果results.length是2,则“i”将保留“2”控制台两次。
我知道因为for循环结束然后执行用户向导搜索,
但我怎么能解决它“i”是0和1。

最佳答案

您正在处理closures,请按如下方式重写代码:

...
(function(id) {
    User_UidSearch(results[id].employee, function (user) {
        console.log(id);
        // results[i]['email'] = user.email;
    });
})(i);

即,将函数包装为unbindi

关于javascript - Javascript,在回调函数中超出变量范围?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25280773/

10-12 12:21
查看更多