Javascript 如何将参数传递到回调函数内部

Javascript 如何将参数传递到回调函数内部,javascript,mysql,node.js,callback,Javascript,Mysql,Node.js,Callback,这是我的密码 for (var x in items) { var name = items[x].Name; var hotelID = 1; var sql = mysql.format('INSERT INTO Item(name, hotelID) VALUES(?, ?)', [name, hotelID]); con.query(sql, function (err, result) { if (err) {

这是我的密码

for (var x in items) {
    var name = items[x].Name;
    var hotelID = 1;
    var sql = mysql.format('INSERT INTO Item(name, hotelID) VALUES(?, ?)', [name, hotelID]);
        con.query(sql, function (err, result) {
            if (err) {
                throw err;
            }
           //Below x is updated by the loop.
           console.log(item[x].Name);
        });

我想在con.query()调用之前获得
x
的值,但是在这里,在回调完成之前,x由
for
循环更新。如何做到这一点???

正如您所指出的,在异步回调中,“在回调完成之前,x由for循环更新”


解决方案是使用ES6语法
let
,而不是
var
。这样声明的变量在回调中被正确地绑定到注册回调时的值,因为循环的每次迭代都会创建一个新变量,而不是使用提升到函数顶部的单个
var

使用
let x
而不是
var x
。。。。并且可以切换到异步+
等待
@Alnitak谢谢,工作正常。请把它作为一个例子answer@Alnitak当我使用
let
时发生了什么?如果它能解释为什么
let
会这样做(就像重复问题的公认答案一样)@Quentin会的,但我不知道,我只知道它会:p注意,这是社区维基,所以我不是来找代表的。“我真的不知道”-我只是给你指了一个解释,你可以看它!@Quentin我看了-这不是一个很好的解释。我想你是在暗示它有比范围更神秘的东西。