не могу понять
почему не получается бесконечная рекурсия?
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 || ''; } |
А почему вы считаете, что должна получиться бесконечная рекурсия?
|
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) |
Цитата:
|
Не при каждом. Вход в цикл for/in происходит только если у объекта есть перечислимые свойства.
|
Цитата:
но еще как заносится значение obj[key] если там стоит вызов функции? |
Цитата:
|
Цитата:
li += '<li>' + key + createTreeText(obj[key]) + '</li>'; оно вызывает функцию , но как записываются новые значение obj[key] если там вызывается функция |
Там нигде не записываются новые значения obj[key]. И вообще там obj нигде не изменяется.
Просто каждый раз в функцию передается все новое значение: сначала сам объект, потом его свойства, свойства его свойств-объектов и так далее. |
Цитата:
блин не знаю как обьяснить по логике тут должно быть li += '<li>' + key + obj[key] + '</li>'; при вызове рекурсией(что бы записало в li текущие значения obj[key]). но как происходит запись если там вызывается функция li += '<li>' + key + createTreeText(obj[key]) + '</li>'; я уже сам запутался=) |
Часовой пояс GMT +3, время: 23:14. |