Есть что то похожее на:
this.getItems = function() {
//some if, checks whether the function has already invoked itself
//some loop
for();
//some if
(is something){
thus.getItems(); //call itself
} else { //ELSE#1
//do something 1
//return result
}
//else - invoked itself
//some loop
//some if
//do something2
return result
Мне нужно, сейчас, на втором вызове:
return result;
я попадаю в //ELSE#1
мне же надо, чтобы фукнция вернула результат, во "вне" сразу, т.е. сразу произошел выход из рекурсивной функции.
Не бойтесь совершенства. Вам его не достичь. © Сальвадор Дали
Здравствуйте, Аноним, Вы писали:
А>Есть что то похожее на:
А>А>this.getItems = function() {
А> //some if, checks whether the function has already invoked itself
А> //some loop
А> for();
А> //some if
А> (is something){
А> thus.getItems(); //call itself
А> } else { //ELSE#1
А> //do something 1
А> //return result
А> }
А> //else - invoked itself
А> //some loop
А> //some if
А> //do something2
А> return result
А>
А>Мне нужно, сейчас, на втором вызове:
А>return result;
А>я попадаю в //ELSE#1
А>мне же надо, чтобы фукнция вернула результат, во "вне" сразу, т.е. сразу произошел выход из рекурсивной функции.
Явно это не возможно, есть такая штука — стек вызова... Хотя есть вариант эмулировать такое поведение бросанием исключения, которое содержит результат работы функции — тогда стек рекурсивного вызова размотается до первого обработчика исключений, который будет трактовать это исключение как результат работы функции. Примерно так
//сама функция
this.func = function()
{
if(some)
{
this.func();//углубить рекурсию
}
else
{
throw "тут результат";//размотать стек до первого обработчика
}
}
//вызов
try
{
this.func();
}
catch(res)
{
alert(res);//"тут результат"
}
Здравствуйте, taluk, Вы писали:
T>Здравствуйте, Аноним, Вы писали:
А>>Есть что то похожее на:
А>>А>>this.getItems = function() {
А>> //some if, checks whether the function has already invoked itself
А>> //some loop
А>> for();
А>> //some if
А>> (is something){
А>> thus.getItems(); //call itself
А>> } else { //ELSE#1
А>> //do something 1
А>> //return result
А>> }
А>> //else - invoked itself
А>> //some loop
А>> //some if
А>> //do something2
А>> return result
А>>
А>>Мне нужно, сейчас, на втором вызове:
А>>return result;
А>>я попадаю в //ELSE#1
А>>мне же надо, чтобы фукнция вернула результат, во "вне" сразу, т.е. сразу произошел выход из рекурсивной функции.
T>Явно это не возможно, есть такая штука — стек вызова... Хотя есть вариант эмулировать такое поведение бросанием исключения, которое содержит результат работы функции — тогда стек рекурсивного вызова размотается до первого обработчика исключений, который будет трактовать это исключение как результат работы функции. Примерно так
T>T>//сама функция
T>this.func = function()
T>{
T> if(some)
T> {
T> this.func();//углубить рекурсию
T> }
T> else
T> {
T> throw "тут результат";//размотать стек до первого обработчика
T> }
T>}
T>//вызов
T>try
T>{
T> this.func();
T>}
T>catch(res)
T>{
T> alert(res);//"тут результат"
T>}
T>
Классный солушен!! Спасибо большое!!!
Здравствуйте, Аноним, Вы писали:
А>Есть что то похожее на:
А>А>this.getItems = function() {
А> //some if, checks whether the function has already invoked itself
А> //some loop
А> for();
А> //some if
А> (is something){
А> return this.getItems(); //call itself
А> } else { //ELSE#1
А> //do something 1
А> //return result
А> }
А> //else - invoked itself
А> //some loop
А> //some if
А> //do something2
А> return result
А>
А>Мне нужно, сейчас, на втором вызове:
А>return result;
А>я попадаю в //ELSE#1
А>мне же надо, чтобы фукнция вернула результат, во "вне" сразу, т.е. сразу произошел выход из рекурсивной функции.
Выделено выше.