メイン コーダーズルーム【スクリプト系】 onLoad = functionでの戻り値の取得 | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
nacbox | Åê¹ÆNo.45190 投稿日時: 2010-6-14 16:27 |
新米 居住地: 東京 投稿: 25
使用環境:
Win7 / Flash CS4 PRO |
onLoad = functionでの戻り値の取得 コーダーズルームではなくて、初心者部屋レベルの質問かもしれませんが、よろしくお願いします。
AS2.0です。 外部xmlを読み込み、読み込んだ値を使用したいと考えています。
上記のコードで、「ここで処理(A)」と書いてある箇所で、XMLの中身を取り出してローカル変数に渡すわけですが、ここは関数内なので、関数の外でその値を使用できない気がします。 通常の関数ですと、
とすれば、ローカル変数のaが戻り値となり、bに渡されるのは分かります。 しかし、 newsXml.onLoad = hoge(); の場合は、関数内のローカル変数をどうやって取り出せば(あるいは、戻り値をどうやって受け取れば)いいのでしょうか。 ローカル変数とグローバル変数の関係はいつも頭が混乱しがちで、苦労しています。 どなたか、よろしくお願いいたします。 |
奥村 典史 | Åê¹ÆNo.45191 投稿日時: 2010-6-14 17:23 |
常連 居住地: 大阪府(以前:東京都府中市 / 土日は大抵京都) 投稿: 69
使用環境:
FlashCS5.5, WinXP,Win7(64bit), 単体テスト用に FlexSDK3.4, As3Unit エディター FlashBuilder5 スクリプト ActionScript3.0 |
Re: onLoad = functionでの戻り値の取得 newsXml.onLoad = hoge();
ではなく newsXml.onLoad = hoge; ですよね?たぶん。 さて、質問の内容に関してですが 私ならクロージャを使います。 ■予備知識 「関数を変数に入れる」ってことが出来ます
こんな感じです。 さて、newsXml.onLoadなのですが このnewsXml.onLoadは先の例の"c"と同じものと考えてください。 このonLoadは どこか私たちの知らないところで呼ばれています。 戻り値を取り出すのは不可能です。 ■クロージャーを使ったやり方 変数newsにXMLを読んだものを入れてみます。 (ここで処理(A)の戻り値がXMLを読んだものとしてます)
どうでしょうか? やってみてください。 気をつけなければならないのはnewsXml.onLoadが 呼ばれてからじゃないとnewsはnilのままであるということです。 |
nacbox | Åê¹ÆNo.45192 投稿日時: 2010-6-14 19:13 |
新米 居住地: 東京 投稿: 25
使用環境:
Win7 / Flash CS4 PRO |
Re: onLoad = functionでの戻り値の取得 「クロージャ」という用語が、ググってみたりしてもなかなか解説が難しくてピンとこないところもあるんですが、
今回の件について理解できたことは、 ・onLoad = hoge; では戻り値は取得できない ・関数内の値は、ローカル変数ではなく、関数外で宣言した変数を書き変えて使う ってことですね。 なんだか、 ・関数内のローカル変数を何とか関数外に取り出せないか ・戻り値を取得する方法で何とかできないか というところに頭が凝り固まっていて、単純にグローバル変数を活用するという脳みそが出てきませんでした。 お恥ずかしい。 うまくいきました。 ありがとうございました。 |
奥村 典史 | Åê¹ÆNo.45193 投稿日時: 2010-6-14 19:58 |
常連 居住地: 大阪府(以前:東京都府中市 / 土日は大抵京都) 投稿: 69
使用環境:
FlashCS5.5, WinXP,Win7(64bit), 単体テスト用に FlexSDK3.4, As3Unit エディター FlashBuilder5 スクリプト ActionScript3.0 |
Re: onLoad = functionでの戻り値の取得 たしかにクロージャの解説は難しいことがいっぱい書いてあってよーわからんですね(汗
しばらくはグローバル変数と考えてても問題ないと思います。 そのうち使うこともでてくると思います。 クロージャは使ってみると「え?これ・・・クロージャって言うんだ・・」って感じなので・・・ |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |