Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.06.2012, 16:32
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

не могу понять
почему не получается бесконечная рекурсия?
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 || '';
  }
Ответить с цитированием
  #2 (permalink)  
Старый 16.06.2012, 16:52
Аватар для Amphiluke
   ☽
Отправить личное сообщение для Amphiluke Посмотреть профиль Найти все сообщения от Amphiluke
 
Регистрация: 07.01.2011
Сообщений: 254

А почему вы считаете, что должна получиться бесконечная рекурсия?
Ответить с цитированием
  #3 (permalink)  
Старый 16.06.2012, 16:53
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

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)
Ответить с цитированием
  #4 (permalink)  
Старый 16.06.2012, 17:08
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от Amphiluke Посмотреть сообщение
А почему вы считаете, что должна получиться бесконечная рекурсия?
функция при каждом вызове будет себя вызывать..
Ответить с цитированием
  #5 (permalink)  
Старый 16.06.2012, 17:10
Аватар для Amphiluke
   ☽
Отправить личное сообщение для Amphiluke Посмотреть профиль Найти все сообщения от Amphiluke
 
Регистрация: 07.01.2011
Сообщений: 254

Не при каждом. Вход в цикл for/in происходит только если у объекта есть перечислимые свойства.
Ответить с цитированием
  #6 (permalink)  
Старый 16.06.2012, 17:13
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от Amphiluke Посмотреть сообщение
Не при каждом. Вход в цикл for/in происходит только если у объекта есть перечислимые свойства.
хм... уже понятней=)
но еще как заносится значение
obj[key]
если там стоит вызов функции?
Ответить с цитированием
  #7 (permalink)  
Старый 16.06.2012, 17:16
Аватар для Amphiluke
   ☽
Отправить личное сообщение для Amphiluke Посмотреть профиль Найти все сообщения от Amphiluke
 
Регистрация: 07.01.2011
Сообщений: 254

Сообщение от cyber
но еще как заносится значение
obj[key]
если там стоит вызов функции?
Боюсь, что не понял, что вы имеете в виду.
Ответить с цитированием
  #8 (permalink)  
Старый 16.06.2012, 17:19
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от Amphiluke Посмотреть сообщение
Боюсь, что не понял, что вы имеете в виду.
вот тут

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


оно вызывает функцию , но как записываются новые значение obj[key] если там вызывается функция
Ответить с цитированием
  #9 (permalink)  
Старый 16.06.2012, 17:22
Аватар для Amphiluke
   ☽
Отправить личное сообщение для Amphiluke Посмотреть профиль Найти все сообщения от Amphiluke
 
Регистрация: 07.01.2011
Сообщений: 254

Там нигде не записываются новые значения obj[key]. И вообще там obj нигде не изменяется.
Просто каждый раз в функцию передается все новое значение: сначала сам объект, потом его свойства, свойства его свойств-объектов и так далее.
Ответить с цитированием
  #10 (permalink)  
Старый 16.06.2012, 17:28
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от Amphiluke Посмотреть сообщение
Там нигде не записываются новые значения obj[key]. И вообще там obj нигде не изменяется.
Просто каждый раз в функцию передается все новое значение: сначала сам объект, потом его свойства, свойства его свойств-объектов и так далее.
вы меня не так поняли=)
блин не знаю как обьяснить
по логике тут должно быть
li += '<li>' + key + obj[key] + '</li>';

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

я уже сам запутался=)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
<li class="active"> Не могу понять :( renelon Javascript под браузер 10 28.09.2013 16:58
Наболевший this. Не могу понять Harvey Общие вопросы Javascript 6 19.08.2011 17:30
Не могу понять, почему не работает автокомпил в IE 8 gargon2008 jQuery 0 07.06.2011 11:31
RegExp - поиск в найденном. Не могу понять senseysensor Общие вопросы Javascript 9 17.10.2010 21:55
не могу понять в чём ошибка scuter Общие вопросы Javascript 2 28.08.2008 15:22