javascript/NodeJS中的变量范围问题
我在访问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
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”的值+下面是亨利将军的解决方案,效果不错。非常感谢你。我花了好几个小时试图找出我哪里出了错,这很管用。非常感谢你。我花了几个小时试图找出我的错误。