Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Инкапсуляция переменных и Рекурсивный вызов функций. (http://www.flasher.ru/forum/showthread.php?t=24641)

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++);
}
}


Часовой пояс GMT +4, время: 09:22.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.