Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   не могу понять (https://javascript.ru/forum/events/29133-ne-mogu-ponyat.html)

cyber 16.06.2012 16:32

не могу понять
 
почему не получается бесконечная рекурсия?
function createTreeText(obj) { // отдельная рекурсивная функция
    var li = '';
    for (var key in obj) {
      li += '<li>' + key + createTreeText(obj[key]) + '</li>';
// функции каждый раз себя вызывает
    }
    if (li) {
      var ul = '<ul>' + li + '</ul>'
    }
    return ul || '';
  }

Amphiluke 16.06.2012 16:52

А почему вы считаете, что должна получиться бесконечная рекурсия?

Deff 16.06.2012 16:53

function createTreeText(obj) { // отдельная рекурсивная функция
    var li = '';
    for (var key in obj) {
      li += '<li>' + key + createTreeText(obj[key]) + '</li>';
// функции каждый раз себя вызывает
alert(li)
    }
    if (li) {
      var ul = '<ul>' + li + '</ul>'
    }
    return ul || '';
  } a=[1,2,3];createTreeText(a)

cyber 16.06.2012 17:08

Цитата:

Сообщение от Amphiluke (Сообщение 181853)
А почему вы считаете, что должна получиться бесконечная рекурсия?

функция при каждом вызове будет себя вызывать..

Amphiluke 16.06.2012 17:10

Не при каждом. Вход в цикл for/in происходит только если у объекта есть перечислимые свойства.

cyber 16.06.2012 17:13

Цитата:

Сообщение от Amphiluke (Сообщение 181861)
Не при каждом. Вход в цикл for/in происходит только если у объекта есть перечислимые свойства.

хм... уже понятней=)
но еще как заносится значение
obj[key]
если там стоит вызов функции?

Amphiluke 16.06.2012 17:16

Цитата:

Сообщение от cyber
но еще как заносится значение
obj[key]
если там стоит вызов функции?

Боюсь, что не понял, что вы имеете в виду. :-?

cyber 16.06.2012 17:19

Цитата:

Сообщение от Amphiluke (Сообщение 181864)
Боюсь, что не понял, что вы имеете в виду. :-?

вот тут

li += '<li>' + key + createTreeText(obj[key]) + '</li>';


оно вызывает функцию , но как записываются новые значение obj[key] если там вызывается функция

Amphiluke 16.06.2012 17:22

Там нигде не записываются новые значения obj[key]. И вообще там obj нигде не изменяется.
Просто каждый раз в функцию передается все новое значение: сначала сам объект, потом его свойства, свойства его свойств-объектов и так далее.

cyber 16.06.2012 17:28

Цитата:

Сообщение от Amphiluke (Сообщение 181867)
Там нигде не записываются новые значения obj[key]. И вообще там obj нигде не изменяется.
Просто каждый раз в функцию передается все новое значение: сначала сам объект, потом его свойства, свойства его свойств-объектов и так далее.

вы меня не так поняли=)
блин не знаю как обьяснить
по логике тут должно быть
li += '<li>' + key + obj[key] + '</li>';

при вызове рекурсией(что бы записало в li текущие значения obj[key]).
но как происходит запись если там вызывается функция
li += '<li>' + key + createTreeText(obj[key]) + '</li>';

я уже сам запутался=)


Часовой пояс GMT +3, время: 23:14.