- ベストアンサー
関数内でのグローバル変数
iQuery やいくつかのライブラリを使用しています。 外部でグローバル変数を定義して、ある関数内でそのグローバル変数に値を設定すると、関数を抜けた時に変数値が保持されている場合と undefined になる場合があります。 どのような関数では保持されて、どのような関数では保持されないのか、よくわかりません。 保持されない関数において、関数内で得た値を外部に反映させたい場合はどのようにすれば良いのでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
No.1 の補足を見る限り、コールバックが非同期に 呼ばれているみたいですね。グローバル変数の問題ではなく、 処理の順序の問題です。 まず、APIが同期なのか非同期なのかチェックしてみて ください。おそらく alert のほうが先に動いています。 もし APIが非同期なら、コールバックの起動を契機に 後の処理を行うように処理をかかないとダメだと思います。
その他の回答 (1)
- 中村 拓男(@tknakamuri)
- ベストアンサー率35% (674/1896)
回答No.1
そうゆうことは無いはずですが、 どのように確認されていますか?
質問者
補足
早々のリプライありがとうございます。 具体的には位置情報を得る geolocation なのですが、 var lat; var lng; navigator.geolocation.getCurrentPosition(function(pos) { lat = pos.coords.latitude; lng = pos.coords.longitude; }); alert(lat + ':' + lng); とかやると undefined になってしまいます。 もちろん関数内では値は取得できています。
お礼
アドバイスありがとうございます。 ご指摘の通りでした。 api のスペックを詳しく読んでみたら asynchronously と書かれており、少し時間を置いてみたら正しく取得できました。 所望の動きのためにはどうコーディングすれば良いのかはまだわかっていませんが、数日悩んでいた問題の原因がようやく判明しました。 どうもありがとうございました。