У меня есть 3 кнопки: Button1, Button2, Button3.
Нужно обрабатывать нажатие на каждую кнопку,
но прикреплять к каждой кнопке сценарий неудобно.
Хочу сделать один обработчик,
который будет по-разному реагировать на кнопки.
К первому кадру ролика я прикрепляю сценарий:

Код AS1/AS2:
Buttons=Array (Button1,Button2,Button3);
for (I=0;I<3;I++)
Buttons [ I ].onPress=
function ()
{trace (I);}
Ожидаемый результат:
при нажатии на кнопку Button1 выведется 0,
при нажатии на кнопку Button2 выведется 1,
при нажатии на кнопку Button3 выведется 2.
На самом деле:
при нажатии на любую кнопку выводится 3.
Почему так происходит?
Потому что создание обработчика - это как бы отложенный вызов функции.
Поэтому переменная I успевает стать равной 3, раньше чем запустится обработчик.
Именно это значение и выводится.
Можно изменить сценарий:

Код AS1/AS2:
Buttons=Array (Button1,Button2,Button3);
for (I=0;I<3;I++)
Buttons [ I ].onPress=
function ()
{trace (I);}
I=12345;
Теперь при нажатии на любую кнопку выводится 12345;
Короче говоря, в обработчик попадает не значение переменной
I, а сама переменная.
Оператор
trace (I) выводит последнее присвоенное переменной
I значение.
Вопрос - как у Чернышевского - что делать?
Как заставить обработчик иметь дело со старыми значениями переменных?