• ベストアンサー

関数内でのグローバル変数

iQuery やいくつかのライブラリを使用しています。 外部でグローバル変数を定義して、ある関数内でそのグローバル変数に値を設定すると、関数を抜けた時に変数値が保持されている場合と undefined になる場合があります。 どのような関数では保持されて、どのような関数では保持されないのか、よくわかりません。 保持されない関数において、関数内で得た値を外部に反映させたい場合はどのようにすれば良いのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

No.1 の補足を見る限り、コールバックが非同期に 呼ばれているみたいですね。グローバル変数の問題ではなく、 処理の順序の問題です。 まず、APIが同期なのか非同期なのかチェックしてみて ください。おそらく alert のほうが先に動いています。 もし APIが非同期なら、コールバックの起動を契機に 後の処理を行うように処理をかかないとダメだと思います。

mathit
質問者

お礼

アドバイスありがとうございます。 ご指摘の通りでした。 api のスペックを詳しく読んでみたら asynchronously と書かれており、少し時間を置いてみたら正しく取得できました。 所望の動きのためにはどうコーディングすれば良いのかはまだわかっていませんが、数日悩んでいた問題の原因がようやく判明しました。 どうもありがとうございました。

その他の回答 (1)

回答No.1

そうゆうことは無いはずですが、 どのように確認されていますか?

mathit
質問者

補足

早々のリプライありがとうございます。 具体的には位置情報を得る geolocation なのですが、 var lat; var lng; navigator.geolocation.getCurrentPosition(function(pos) {  lat = pos.coords.latitude;  lng = pos.coords.longitude;  }); alert(lat + ':' + lng); とかやると undefined になってしまいます。 もちろん関数内では値は取得できています。

関連するQ&A