非同期処理ではまる

XMLHttpRequest である、URLから値を取得する場合。
これを通常は非同期で実行の方が多いと思いますが、グローバル変数を利用して
この値を書き換える処理が、HTMLのクリックイベントと通信結果の場合で書き換えるとすると注意が必要

function getStatusFromUrl(stat)
{
     // ここで、非同期通信で、現在のステータスを送り、その結果で
     // ステータスを変更する場合。
    respons = GetStatus(stat);
  // ここで、通信が完了する前に、G_Status が
   // クリックイベントにより書き換えられる。
   // そして、通信結果により、G_Status が書き換わる。
     G_Status = respons.stat;

}

function clickStatusChange(stat)
{
     G_Status = stat;
}

ここで、G_Statusはクリック等の動作で思わない値になってしまう。
ただ、これは単純な例なので、G_Status の仕様をしっかり決めておけば
問題ないのですが、もう少し複雑な処理を実行すると思わぬ壁にぶち当たります。