не могу понять
почему не получается бесконечная рекурсия?
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>'; я уже сам запутался=) |
все дошло!!! вот я туплю=) при рекурсии меняется значение key
|
Amphiluke,
:thanks: |
http://cs10349.userapi.com/u11538055/-7/x_5d2305be.jpg
var J=-1; //(Номер вложенности) function createTreeText(obj) { // отдельная рекурсивная функция J++; var li = ''; for (var key in obj) { alert(J+" (Номер вложенности)") alert(createTreeText(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) Воть так достигается => error: Maximum recursion depth exceeded |
Цитата:
не подумал что in перебирает пока есть что перебирать |
Часовой пояс GMT +3, время: 17:31. |