所有人。
我对“回调函数-变量范围”有问题,
我想用'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);
即,将函数包装为unbind
i
。关于javascript - Javascript,在回调函数中超出变量范围?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25280773/