PDA

Просмотр полной версии : Инкапсуляция переменных и Рекурсивный вызов функций.


AlexSm
17.12.2001, 11:28
Добрый день, Флешеры!
Для меня было открытием то, что ActionScript не знает про инкапсуляцию данных.

Смотрите

i=10;
t=20;
r=30;
r=Fun(i);

trace("i="+i+" t="+t+" r="+r);

function Fun(i){
i=100;
t=200;
return r;
}

TRACE Выдаст :
i=10 t=200 r=30
С переменной i - все нормально.
Но переменная t, определенная вне функции Fun() внутри этой функции переопеделилась.
в строке return r - вообще явная идеологическая ошибка, но Актион Скрипт воспринимает внешние переменные также как и внутрении.

Меня это очень сильно удивило :eek: и даже разозлило :mad: , но что поделаешь, надо придумать ка же с этим бороться :confused:

Как делать рекурсивный вызов функций ?
Ведь кроме передаваемых параметров (которые как видим инкапсулируются, в функции надо сохранять и кучу других промежуточных данных и чтобы при выходе из рекурсии они восстановились....

Как ВЫ делаете рекурсию ???

СПАСИБО БОЛЬШОЕ !!!!

Yuri S.
17.12.2001, 12:09
Ставь var, когда определяешь переменные в функции.

AlexSm
17.12.2001, 12:49
Спасибо вобщем. А я мучался. Думал через массив делать.
СПАСИБО !

ish
17.12.2001, 19:20
советую для рекурсий использовать arguments.callee

function x() {
this.a=arguments;
this.i=this.a[0];
if(this.i>10) {
return
} else {
trace(this.i);
this.a.callee(this.i++);
}
}