Re: JavaScript, Выход из рекурсивной функции
От: Mamut Швеция http://dmitriid.com
Дата: 30.06.10 08:21
Оценка: 1 (1) +2
Здравствуйте, Аноним, Вы писали:

А>Есть что то похожее на:



А>
А>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

А>мне же надо, чтобы фукнция вернула результат, во "вне" сразу, т.е. сразу произошел выход из рекурсивной функции.


Выделено выше.


dmitriid.comGitHubLinkedIn
JavaScript, Выход из рекурсивной функции
От: Аноним  
Дата: 25.06.10 08:08
Оценка:
Есть что то похожее на:


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
мне же надо, чтобы фукнция вернула результат, во "вне" сразу, т.е. сразу произошел выход из рекурсивной функции.
Re: JavaScript, Выход из рекурсивной функции
От: Senyai Россия http://www.arseniy.net
Дата: 25.06.10 08:36
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть что то похожее на:


Можно более реальный js. Я ничего не понимаю.
Не бойтесь совершенства. Вам его не достичь. © Сальвадор Дали
Re: JavaScript, Выход из рекурсивной функции
От: taluk  
Дата: 29.06.10 11:15
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть что то похожее на:



А>
А>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);//"тут результат"
}
Re[2]: JavaScript, Выход из рекурсивной функции
От: Аноним  
Дата: 30.06.10 04:48
Оценка:
Здравствуйте, 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>


Классный солушен!! Спасибо большое!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.