Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript/NodeJS中的变量范围问题_Javascript_Variables_Node.js - Fatal编程技术网

javascript/NodeJS中的变量范围问题

javascript/NodeJS中的变量范围问题,javascript,variables,node.js,Javascript,Variables,Node.js,我在访问NodeJS中变量的值时遇到问题。下面是一些示例代码和我得到的结果 for (var z=0, zMessageCount = Description.length; z<zMessageCount; z++){ console.log(z); if(SomeOtherColumnValue[z] > 9){ client.query('SELECT * FROM my_table WHERE some_column=' + ColumnVal

我在访问NodeJS中变量的值时遇到问题。下面是一些示例代码和我得到的结果

for (var z=0, zMessageCount = Description.length; z<zMessageCount; z++){
    console.log(z);
    if(SomeOtherColumnValue[z] > 9){
        client.query('SELECT * FROM my_table WHERE some_column=' + ColumnValue[z], function (err, results) {
            if(results < 1){
                console.log(z);
            }
        })
    }
}
for(var z=0,zMessageCount=Description.length;z 9){
query('从my_表中选择*,其中某些_列='+ColumnValue[z],函数(err,results){
如果(结果<1){
控制台日志(z);
}
})
}
}

这就是我面临的问题。在for“for”循环中,z的值从0到14。但是,当我尝试从client.query函数访问它时,它的值是15。它不是为每个循环向自身添加1。这里缺少什么吗?

您需要在函数中封装z以提供作用域

for (var z=0, zMessageCount = Description.length; z<zMessageCount; z++){
    console.log(z);
    if(SomeOtherColumnValue[z] > 9){
      zQuery(z);  
    }
}

function zQuery (z) {
  client.query('SELECT * FROM my_table WHERE some_column=' + ColumnValue[z], function (err, results) {
      if(results < 1){
         console.log(z);
      }
   });
}
for(var z=0,zMessageCount=Description.length;z 9){
zQuery(z);
}
}
函数zQuery(z){
query('从my_表中选择*,其中某些_列='+ColumnValue[z],函数(err,results){
如果(结果<1){
控制台日志(z);
}
});
}

您需要在函数中包装z以提供作用域

for (var z=0, zMessageCount = Description.length; z<zMessageCount; z++){
    console.log(z);
    if(SomeOtherColumnValue[z] > 9){
      zQuery(z);  
    }
}

function zQuery (z) {
  client.query('SELECT * FROM my_table WHERE some_column=' + ColumnValue[z], function (err, results) {
      if(results < 1){
         console.log(z);
      }
   });
}
for(var z=0,zMessageCount=Description.length;z 9){
zQuery(z);
}
}
函数zQuery(z){
query('从my_表中选择*,其中某些_列='+ColumnValue[z],函数(err,results){
如果(结果<1){
控制台日志(z);
}
});
}

z
在该范围内应该可以。嗯,胡猜,但是client.query对传递给它的字符串实际上做了什么?我有一种感觉,它会将它发送到另一个非阻塞回调函数,并在循环完成后执行,而不是写掉。这是什么库?client.query是节点mysql的一部分。它确实看起来像是。。。是否有其他方法可以这样做?可能是错误的,但您可以尝试
var columnName=columnName[z]并将其传递到client.query。在if语句后定义
columnName
。这可能有助于将z作为引用传递到
client.query
anonymous函数(client.query中的第三个参数)创建一个闭包,该闭包允许它在继续递增时查看“z”的值+下面是亨利将军的解决方案。
z
在这个范围内应该可以。嗯,胡猜,但是client.query对传递给它的字符串实际上做了什么?我有一种感觉,它会将它发送到另一个非阻塞回调函数,并在循环完成后执行,而不是写掉。这是什么库?client.query是节点mysql的一部分。它确实看起来像是。。。是否有其他方法可以这样做?可能是错误的,但您可以尝试
var columnName=columnName[z]并将其传递到client.query。在if语句后定义
columnName
。这可能有助于将z作为引用传递到
client.query
anonymous函数(client.query中的第三个参数)创建一个闭包,该闭包允许它在继续递增时查看“z”的值+下面是亨利将军的解决方案,效果不错。非常感谢你。我花了好几个小时试图找出我哪里出了错,这很管用。非常感谢你。我花了几个小时试图找出我的错误。