循環看看下面的代碼:事件監聽以及在AS3
import flash.display.MovieClip;
var q:MovieClip;
for(var i=0;i<10;i++)
{
q=new MovieClip();
q.addEventListener(Event.ADDED_TO_STAGE,function(e){trace("<<<<>"+i)});
q.addEventListener(Event.ENTER_FRAME,function(e){trace(">"+i)});
addChild(q);
}
輸出將是:
<<<<>0
<<<<>1
<<<<>2
<<<<>3
<<<<>4
<<<<>5
<<<<>6
<<<<>7
<<<<>8
<<<<>9
>10
>10
>10
>10
>10
>10
>10
>10
>10
現在,在這裏可以清楚地看到的是,雖然Event.ADDED_TO_STAGE是正確註冊, Event.ENTER_FRAME不是,只註冊到最後一個值。
現在這裏變得複雜的時候,採取以下代碼:
import flash.display.MovieClip;
var q:MovieClip;
for(var i=0;i<10;i++)
{
q=new MovieClip();
q.name="q_"+i;
q.addEventListener(Event.ADDED_TO_STAGE,function(e){trace("<<<<>"+i)});
q.addEventListener(Event.ENTER_FRAME,function(e){trace(">"+e.target.name)});
addChild(q);
}
輸出將是:
<<<<>0
<<<<>1
<<<<>2
<<<<>3
<<<<>4
<<<<>5
<<<<>6
<<<<>7
<<<<>8
<<<<>9
>q_0
>q_1
>q_2
>q_3
>q_4
>q_5
>q_6
>q_7
>q_8
>q_9
所以得出的結論是,事件被正確註冊,而是以一種不可思議的方式annonymous函數只接收來自i的最後一個值。
有誰知道爲什麼會發生這種情況?
如果這樣做,請分享,但不要回答如下:'嗯,我是首先計算的,很明顯,事件是在'之後註冊的。我想知道,如果有人有大約原因的更多見解和反響
編輯: 在新的答案光我所編輯的問題,因爲我已經意識到,它並沒有「打點」 確定給這個代碼:
for(var i=0;i<10;i++)
{
var q:MovieClip;
q=new MovieClip();
var dummy:int;
dummy = 6+i;
q.addEventListener(Event.ENTER_FRAME,function(e){trace(dummy);});
addChild(q);
}
虛設被創建爲新的變種,因此在每次迭代時在循環內一個新的指針。所以通常情況下,函數內的啞元應該是不同的。仍然是同一個假人。
現在,經過更多的測試,我已經意識到,在的情況下,「爲{VAR X}」編譯器使用var關鍵字只有一次,所以基本上它改變了像「變種X;爲{}」
我編輯了我的答案。 – bwroga
感謝您的回答:) –