2011-08-26 53 views
2

我已经构建了函数来返回一些变量。但我的函数异步使用另一个函数。异步函数中的变量作用域

function getVariable() { 
    var myVariable; 
    asyncronousFunction(function(...){ 

    myVariable = ... 

    }); 
    return myVariable; 
} 

的问题是,myVariable的外侧和内侧中asyncronousFunction是不同的变量。所以我不能从异步函数中为myVariable赋值。

如何解决这个范围问题?谢谢。

回答

5

他们相同变量,但你不能return异步函数调用的结果同步从你的getVariable功能。 myVariable的值将在某个未指定的稍后时间点异步更新。但是你的函数现在返回的值。这是行不通的。

这意味着你的getVariable函数也是异步的,这意味着你必须这样设计它。例如,它可以接受回拨,就像asyncronousFunction一样。

4

他们没有什么不同变量,它是同一个变量...但你有没有在函数结束时,你return之前分配一个值myVariable

这里的正确模式是getVariableasychronousFunction接受回调,当asynchronousFunction完成执行时会执行回调。

function getVariable(callback) { 
    var myVariable; 
    asyncronousFunction(function(/* pass callback as one of the parameters */){ 

    myVariable = ... 

    }); 

    // Don't return myVariable, as it's useless at this point 
}; 

function asyncronousFunction(callback) { 
    // This simulates the asynchronous call. When the call finishes, invoke callback and pass the result as a parameter. 
    setTimeout(function() { 
     callback("result"); 
    }, 1000); 
} 

您应该然后编辑你如何使用功能getVariable()

那么,你可能有:

var value = getVariable(); 
// do whatever with value 
value++; 

你现在应该有:

getVariable(function (value) { // value is now passed as a parameter 
    value++; 
});