• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:functionについて)

functionについて

このQ&Aのポイント
  • functionについての質問とは、onReleaseイベントでの関数呼び出しにおける問題についての疑問です。
  • .onRelease = F_action01と書く場合は通常通り実行されますが、.onRelease = F_action01()と書くと、ロード時に処理が実行され、以後onReleaseでアクションは実行されません。なぜこのような事が起こるのかがわかりません。
  • 解決方法が見つかりましたが、なぜ()をつけるとロード時に処理が実行されるのか、そして以後onReleaseが無効になるのかについての詳しい解説を求めています。

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

  • ベストアンサー
  • perse
  • ベストアンサー率74% (113/152)
回答No.1

(1) I_button01.onRelease = F_action01; では関数F_action01が代入される。 (onReleaseしたときに関数F_action01が呼ばれるように設定される。) (2) I_button01.onRelease = F_action01(); では関数F_action01が実行された結果(戻り値)が代入されます。 (onReleaseしたときに関数F_action01の戻り値が呼ばれるように設定される) (1)の書き方ではonReleaseするまでF_action01は実行されません。 (2)の書き方ではswfが読み込まれた時点(書いた場所によります)でF_action01が実行され、 その戻り値がonReleaseに代入されます。 function F(){ return XX } と言う関数を定義した場合、 I_button01.onRelease = F(); //←実行されてXXが戻り値となりそれが代入される。 I_button01.onRelease = XX; この二つは同じ結果になります。 戻り値が関数であれば()がついていてもうまくいきます。 function F_action02() { return function () { trace("アクション2"); }; } I_button01.onRelease = F_action02(); たぶんコンナ感じだと思います。

goo2408
質問者

お礼

書き込みありがとうございます。 最初、うまく理解できずにいたのですが、ようやく理解ができるようになりました。大変参考になりました。 書き込みいただきありがとうございました。

関連するQ&A