В разделе 6.3 обзора AVM 2 есть хорошее описание:
С локальных регистров
активация не фиксируется, когда
инструкция новой функции выполнена,
среда для неконечных функций
должны храниться в объектах активации
это может быть захвачено правильно.
инструкция newactivation создает такой
активация.
Используется в методе, когда внутри него определена локальная функция, например:
public function QuickTest()
{
startTimer(1);
startTimer(2);
}
public function startTimer(id:int):void
{
var timer:Timer = new Timer(1000, 1);
timer.addEventListener(TimerEvent.TIMER_COMPLETE, function(ev:TimerEvent):void
{
trace('Timer #'+id+' done.');
});
timer.start();
}
Что приводит к:
Timer #1 done.
Timer #2 done.
Вы видите, что локальная переменная и аргумент были "заблокированы" при вызове метода. Это связано с тем, что метод startTimer создает активацию при каждом запуске, и именно в этом месте эти переменные блокируются. Если локальные переменные не были заблокированы, результатом этого кода будет:
Timer #2 done.
Timer #2 done.