Javascript 从外部更改变量';s范围
我需要Javascript 从外部更改变量';s范围,javascript,node.js,function,scope,Javascript,Node.js,Function,Scope,我需要foobar返回true,但它会返回false。 这当然是由于JavaScript的作用域,但我想知道有什么方法可以克服这个问题?还是不可能 我很抱歉问这样一个常见的问题,但我已经研究了其他几个堆栈溢出问题,它们没有帮助,我也尝试了许多其他代码,但没有成功。编辑:虽然我的答案是正确的,显然,OP的真正问题在于,他试图在回调返回之前访问一个被回调修改的变量 请尝试下面的代码。我创建了一个名为“that”的变量,它存储对您所在范围的引用。然后,每次我想要正确的foobar,我只是在它前面加上“
foobar
返回true
,但它会返回false
。
这当然是由于JavaScript的作用域,但我想知道有什么方法可以克服这个问题?还是不可能
我很抱歉问这样一个常见的问题,但我已经研究了其他几个堆栈溢出问题,它们没有帮助,我也尝试了许多其他代码,但没有成功。编辑:虽然我的答案是正确的,显然,OP的真正问题在于,他试图在回调返回之前访问一个被回调修改的变量 请尝试下面的代码。我创建了一个名为“that”的变量,它存储对您所在范围的引用。然后,每次我想要正确的foobar,我只是在它前面加上“that”
刚试过这个,仍然返回false。然后呢?您的代码仍然打印
foobar=false
。在查询完成之前,您正在关闭连接。冷静。我假设是同步的。写之前先阅读编辑。我的代码日志是真的。注意,我定义了mysql方法
function get_all_channels_by_order(){
var foobar = false
mysql_connection.connect()
mysql_connection.query("SELECT * FROM channels ORDER BY listorder ASC", function(){
foobar = true
})
mysql_connection.end()
console.log(foobar)
}
var mysql_connection = {};
mysql_connection.connect = function(){
console.log("call to mysql_connection.connect");
}
mysql_connection.query = function(query,cb){
console.log("call to mysql_connection.query with query of",query);
if(cb){
cb();
}
}
mysql_connection.end = function(){
console.log("call to mysql_connection.end");
}
function get_all_channels_by_order(){
var that = this;
that.foobar = false;
console.log("foobar=",that.foobar);
mysql_connection.connect()
mysql_connection.query("SELECT * FROM channels ORDER BY listorder ASC", function(){
that.foobar = true
})
mysql_connection.end()
console.log("foobar=",that.foobar);
}