ついに夏本番!さぁ、家族でキャンプに行くぞ! >>

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で質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q文字列から、特定の文字を削除したい

アンケートで入力された値を受け取り、メールで送信しているのですが、受け取った値から、特定の文字列を削除することは可能でしょうか?

例えば電話番号の入力の場合、
03-xxxx-xxxx →03xxxxxxxx
077-xxx-xxxx →077xxxxxxx
のように、-(ハイフン)が入力されていたら、-を削除した文字列に置換してメール送信したいのです。
入力する時に、3つのテキストエリアに分けるのは諸事情でできないので、特定の文字を削除する関数か処理方法がありましたら、教えていただきたいです。
よろしくお願いします。

Aベストアンサー

str_replace
http://itbtech.itboost.co.jp/man/php_man/function.str-replace.html

<?php
$orig_telno = "03-xxxx-xxxx";

$telno = str_replace("-", "", $orig_telno);
echo $telno;

03xxxxxxxx

“PHP 文字列” あたりをキーワードに検索すれば
そんなに難しいものでもないような。

Q別ファイルのfunctionの読み込み方

こんにちは
外部ファイル hello.js
-----------------------------
function aisatsu(){
var aa="hello"
}
-----------------------------
というファイルが存在した時にjikkou.htmlでaaの値、”hello”を呼び込みたい場合はどう記述すればよいのでしょうか?htmlのなかでaisatsu()をどこに記述していいのか分かりません。どうか教えてください。ただ、hello.jsのほうは実際の記述を簡略化したものであるのでそちらのほうはいじれません。

宜しくお願いします。

必要ないかもしれませんが、念のために私が最初に書いたhtmlの文です(もちろん実行できませんでした)
------------------------------------
<html>
<script language="javascript" src="hello.js">
aisatsu(){
document.write(aa);
}
</script></html>
------------------------------------

こんにちは
外部ファイル hello.js
-----------------------------
function aisatsu(){
var aa="hello"
}
-----------------------------
というファイルが存在した時にjikkou.htmlでaaの値、”hello”を呼び込みたい場合はどう記述すればよいのでしょうか?htmlのなかでaisatsu()をどこに記述していいのか分かりません。どうか教えてください。ただ、hello.jsのほうは実際の記述を簡略化したものであるのでそちらのほうはいじれません。

宜しくお願いします。

必要ないかもしれませんが、念のために...続きを読む

Aベストアンサー

function内で「var」をつけて変数を宣言するとfunction外からその変数の内容を取得することができなくなります。(returnで参照することはできます。)
なので変数の内容を取得する場合は「hello.js」の内容を

function aisatsu(){
var aa="hello";
return aa;
}

このように修正し、

<script language="javascript" src="hello.js"></script>
<script language="javascript">
var data=aisatsu();//「aisatsu()」関数の「aa」変数内のデータを引っ張り出す(return aa;)
document.write(data);//書いたり
alert(data);//アラートしたり
window.status=data;//ステータスバーに表示したり・・
</script>


人気Q&Aランキング