
Код AS3:
package tests
{
import flash.display.Sprite;
/**
* ...
* @author wvxvw
*/
public class TestOpneNewStack extends Sprite
{
private var _stackControl:int;
public function TestOpneNewStack()
{
super();
this.recure();
}
private function recure():*
{
try
{
this._stackControl++;
return recure();
}
catch (error:Error) { trace("stack limit:", this._stackControl, error.message); }
}
}
}
Несколько запусков этого кода дали разные результаты, а именно: 3299, 3501, 3301. (Примечание: результаты были на столько разными только от того, что менялся текст внутри trace(), если текст не менять, то результаты находятся примерно в пределах 3300-3305). С чем это связано? И почему есть разница даже при выполнении абсолютно одинакового кода?
(Примечание 2: как и следовало ожидать, возвращая вызов функции вместо того, чтобы просто ее вызывать, несколько оптимизирует производительность / позволяет запихать больше вызовов в стек, т.как все функции все равно всегда что-то возвращают).