1

質問 - 変数をグローバル スコープに渡す方法は? :

var global_variable;

chrome.storage.local.get('ABC',function(result){
            global_variable = result; //pass result to global var.
});

console.log(global_variable); //outputs undefined, why!!!?
4

3 に答える 3

2

グローバル変数を設定するconsole.log()前に起動されるからです。非同期で起動される ためです。'ABC',function(result){
chrome.storage.local.get

それを確認するには、次のコードをテストします。

var global_variable;
chrome.storage.local.get('ABC',function(result){
        global_variable = result; //pass result to global var.
        test();
});
function test() {
    console.log(global_variable);
}
于 2013-04-06T14:16:51.013 に答える
1

非同期関数のコールバック内で変数を設定しています。コールバックは、get アクションが完了した後に実行されます。

コードは次の順序で実行されます。

chrome.storage.local.get("ABC",callback);

それから

console.log();

それから

callback()

コールバックに console.log ステートメントを配置し、現在のステートメントの後に実行されることを確認することで、これを確認できます。

Javascript 関数は、非同期コールバック呼び出しを実行する前に完了するまで実行されます。

このように書いた方が理にかなっているかもしれませんが、これはあなたが今持っているものと同等です。

//define the callback
function callbackFunction(result){
      global_variable = result; //pass result to global var.
}

//run the get.  When it is complete the callback will be added to a queue 
//to run next after current operations have completed
chrome.storage.local.get('ABC',callback);

// this will run immediately after the get call
console.log(global_variable);

変数を操作する場合は、ロジックをコールバック (またはコールバックによって呼び出される別の関数) に配置する必要があります。

于 2013-04-06T14:17:37.150 に答える