2011-08-26 54 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++; 
});