dポイントプレゼントキャンペーン実施中!

iQuery やいくつかのライブラリを使用しています。

外部でグローバル変数を定義して、ある関数内でそのグローバル変数に値を設定すると、関数を抜けた時に変数値が保持されている場合と undefined になる場合があります。

どのような関数では保持されて、どのような関数では保持されないのか、よくわかりません。

保持されない関数において、関数内で得た値を外部に反映させたい場合はどのようにすれば良いのでしょうか。

A 回答 (2件)

No.1 の補足を見る限り、コールバックが非同期に


呼ばれているみたいですね。グローバル変数の問題ではなく、
処理の順序の問題です。

まず、APIが同期なのか非同期なのかチェックしてみて
ください。おそらく alert のほうが先に動いています。

もし APIが非同期なら、コールバックの起動を契機に
後の処理を行うように処理をかかないとダメだと思います。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。

ご指摘の通りでした。

api のスペックを詳しく読んでみたら asynchronously と書かれており、少し時間を置いてみたら正しく取得できました。

所望の動きのためにはどうコーディングすれば良いのかはまだわかっていませんが、数日悩んでいた問題の原因がようやく判明しました。

どうもありがとうございました。

お礼日時:2011/04/27 21:45

そうゆうことは無いはずですが、


どのように確認されていますか?

この回答への補足

早々のリプライありがとうございます。

具体的には位置情報を得る geolocation なのですが、

var lat;
var lng;
navigator.geolocation.getCurrentPosition(function(pos) {
 lat = pos.coords.latitude;
 lng = pos.coords.longitude;
 });
alert(lat + ':' + lng);

とかやると undefined になってしまいます。

もちろん関数内では値は取得できています。

補足日時:2011/04/27 18:06
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!