Возьмем следующий код:EventListener и петли в 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.
Кто-нибудь знает, почему это происходит?
И если да, пожалуйста, поделитесь, но не ответьте в ближайшее время: «Ну, я вычисляется первым, и ясно, что события регистрируются после«. Я хотел бы знать, если кто-то имеет более глубокое представление о причинах и последствие
Edited: В свете новых ответов я отредактировал вопрос, так как я уже понял, что это не «хита пятно» Хорошо дать этот код:
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);
}
манекен создается как новый вар, таким образом, новый указатель внутри цикла на каждой итерации. Таким образом, обычно манекен внутри функции должен быть другим. Все-таки такой же манекен.
Теперь после нескольких тестов я понял, что в случае «для {вар х}» компилятор использует УАК ключевое слово только один раз, так что в основном она изменяется во что-то вроде «вар х, для {}»
Я отредактировал свой ответ. – bwroga
Спасибо за ответ :) –