в вашем примере ваш я не делаю то, что вы думаете, он делает. Вы объявили это как глобальную переменную, и переход к функции, как вы делаете, не имеет смысла. В конце ваши кнопки просто сообщают о текущем значении i (которое после цикла всегда равно 8).
Мне нравится другое предлагаемое решение, но вот более объектно-ориентированное решение, которое может оказаться полезным в зависимости от того, что вы делаете с вашей кнопкой (или другими объектами в будущем).
public class MyButton extends Button{
public var myIndex:Number;
}
Теперь вы используете MyButton вместо Button и в свой цикл добавляете
btn.myIndex = i;
затем присоедините универсальный обработчик событий
btn.addEventListener(MouseEvent.CLICK, myHandler);
который будет выглядеть так:
function myHandler(evt:MouseEvent){
trace(evt.target.myIndex);
}
Смотрите ... целью события всегда будет объект, к которому вы прикрепили событие. Именно этому объекту вы должны придавать любые значения, которые хотите сохранить. Лично я предпочитаю такой подход, потому что тогда информация относится к объекту (и может использоваться другими элементами, которым он может понадобиться), а не в обработчике и только в обработчике.