トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     for文とボタンアクション
投稿するにはまず登録を

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
salvox
Åê¹ÆNo.11319
投稿日時: 2004-10-6 4:14
常連
居住地: 東京都
投稿: 73
使用環境:
これは、僕も陥った
ど?も、たまにカキコしているSalvox(サルヴォックス)です。

あ?、確かに僕も最初の頃は、これに躓いてました。
多分、殆どの人が一往に躓いているんじゃないかと思うのですが。

多分 gigitさんの中では、

// ↓この 変数『 i 』
for( i=0; i<31; i++ ){
}



// ↓この 変数『 i 』
this['mc0'....'mc31'].bt.onPress = function(){
   trace(i);
};

が、同じものだと思ってませんか?(僕も初めは思ってました。)
でも、実際は二つの変数『 i 』は、全く別もので

  for( i=0; i<31; i++ ){}

↑この変数『 i 』は関数中で出てきていますが、
ローカル変数は、var宣言しないとローカル変数にならないので、
この変数『 i 』は、

  for( this.i=0; this.i<31; this.i++ ){}
  

と書いてるのと一緒の意味になります。

で、、

this['mc0'....'mc31'].bt.onPress = function(){
   trace(i);
};

↑こちらの変数『i』は、
こちらも、onPress = function()←関数宣言中で
『i』が出てきてるにも関わらず、var宣言していないので、
ローカル変数にはならず、

  // mc0だった場合は・・・
  this['mc0'].bt.onPress = function(){
     trace(this.mc0.bt.i);
  };

  // mc1だった場合は、、
  this['mc1'].bt.onPress = function(){
     trace(this.mc1.bt.i);
  };

と書いてるのと同じ意味になります。

つまり、for文の『i』は、『this』直下の『i』を指してるのに対しonPress = functon() 内の『i』は、this.mc0,,,31.bt直下の『i』変数を指してるので、for文でカウントアップされた変数『i』の値は、全く、onPress = functon()内の『i』には、影響を与えてないことになるんです。

では何故、31と表示されるか!?

this.mc0.btのボタンアクションを実行すると、
for文で定義された trace(i); ってのが呼ばれるんですが、
この『i』は this.mc0.bt.iの『 i 』で、それは、呼び出されただけで、初期化も、宣言もされてないので値はundefined、もしくは、メモリー上にすら存在しない。

普通ならコンパイルエラーさ。

でも、Flashは気が利いてるというか、余計な処理なのか、
どこかで変数『i』が宣言されてないか探してくれるんですよ。
で、、先ほどの、、


  for( i = 0; i<31; i++ )
  


↑ なんと!! i = 0; と立派に宣言され、かつ初期化まで
されて、おまけに、i++ とインクリメントまでされてる変数が
ある!! ここだ!! っと、Flashはお利口にも、余計に

『this.mc0.bt.i を this.i でしょう?』
『あんた書き間違えたんだよね?』

と、言わんばかりに、取得し、
結果 31 が表示されると。

如何でしょう?
最初は分かりづらいかも知れませんが、
その内慣れますよ(^^ ;)。


----------------
(C)SalvoxStudioStation

フラット表示 前のトピック | 次のトピック

題名 投稿者 日時
   for文とボタンアクション gigit 2004-10-3 19:18
     Re: for文とボタンアクション Fumio 2004-10-3 20:39
   » これは、僕も陥った salvox 2004-10-6 4:14
       Re: デフォルト参照とthis参照 Fumio 2004-10-6 9:58
       Re: これは、僕も陥った youich 2004-10-6 10:44
         ありがとうございました。 gigit 2004-10-6 21:30
         m(_ _)m 勉強不足でした。 salvox 2004-10-12 4:16

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops