从其范围之外更改变量

Change a variable from outside it's scope

本文关键字:改变 变量 范围      更新时间:2024-07-14
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)
}

我需要foobar返回true但它返回false。这当然是由于 JavaScript 范围,但我想知道有什么方法可以克服这个问题吗?还是不可能?

我很抱歉问这样一个常见的问题,但我看过其他几个 Stack Overflow 问题,它们没有帮助,我也尝试了很多其他代码而不是这个但没有成功。

编辑:虽然我的答案是正确的,但显然 OP 的真正问题是他试图在回调返回之前访问一个被回调修改的变量。

请尝试下面的代码。我创建了一个名为"that"的变量,它存储了对您所在范围的引用。然后,每当我想要正确的foobar时,我只需在它前面加上"that"。

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);
}