使用Javascript - 调用某变量之外的if / else块返回未定义(Javascript

2019-10-23 08:48发布

我还以为你这是怎么做的if / else块全局(案例3)内的变量。

connection.query(sql, function (err,rows){

    //Handle Errors
    if(err){
        //Log The Error & Die
    }

    //If Successful - Log Results For Now (Change To Export Results)
    else {
        //console.log(rows);
        foo = rows;

    }

});

console.log(foo); // Out: undefined

为什么我不能访问功能之外的变量?

那么,这里的问题是了解什么是真正异步之一。 与@AmmarCSE聊天,之后看这里所以这伟大的问题 ,我明白,我的结构我的问题(和我的代码,很明显)不正确。

我试图访问未被定义,直到函数完成运行(SQL查询到远程数据库显然需要更长的时间才能完成,然后运行本地脚本)的变量。 如果我异步地构建我的代码,但是,该变量只被调用一次函数完成

这一点,事实证明-是不是变量范围的问题,真的,但变量定义时间 (不知道这是对于其中的变量得到定义脚本的时间正确的术语- CS专业,随意编辑正确的说法)。

无论如何,这是新的代码:

runSQL(function(result){

//Do Whatever you want with the results - they're defined!!
console.log(result);
)};

function runSQL(callback){

connection.query(sql, function (err,rows){

        //Handle Errors
        if(err){
            //Log The Error & Die
        }

        //If Successful - Log Results For Now (Change To Export Results)
        else {
            callback(rows);            
        }

    });

}

Answer 1:

当你在error callback ,它定义了自己的范围。 因此, foo是只对关闭和任何嵌套关闭可见 。 对于情况3,你在链接中提到

var a = 1;

function four() {
  if (true) {
    var a = 4;
  }

  alert(a); // alerts '4', not the global value of '1'
}

他们提醒正确闭合内的变量, function four()即使该变量是在所定义的if块,但是它的父功能可见。

但是,你正在foo 全球由不前缀var 。 然而,在回调后的结果记录undefined ,因为在这一点上, foo尚未确定。 如果你在错误日志中回调中会工作,但我建议你调整你的代码回调的异步性工作

connection.query(sql, function (err,rows){

    //Handle Errors
    if(err){
        //Log The Error & Die
     }

    //If Successful - Log Results For Now (Change To Export Results)
    else{
        //console.log(rows);
        foo = rows;

    }
    console.log(foo);
    });


Answer 2:

如果你把一个var foo = "something"在某个地方,这会就等于“东西”。 我想这并没有进入其他否则它会等于rows ......也就是有可能rows是不确定的?

也无需使用var foo =任何地方变成如果一个全局变量foo =执行位,这可能是不可取的......



Answer 3:

var result= connection.query(sql, function (err,rows){

    //Handle Errors
    if(err){
        //Log The Error & Die
     }

    //If Successful - Log Results For Now (Change To Export Results)
    else{
        //console.log(rows);
        document.foo = rows;

    }

    });

result.on('result', function(){
    console.log(document.foo);
}


文章来源: Javascript - Calling A Variable From Outside Of If/Else Block Returns Undefined