Непредвиденное поведение простейшей функции js

Мне надо было распарсить глубоко вложенный объект - в html разметку. В поисках решения наткнулся на такой код:

var menu = {
    'item1.1': {
        "item2.1": {
            "item3.1": "#link3.1",
            "item3.2": "#link3.2"
        },
        "item2.2": "#link2.2"
    },
    "item1.2": {
        "item2.3": {
            "item3.3": "#link3.3",
            "item3.4": "#link3.4"
        }
    },
    "item1.3": "#link1.3"
};
function build(list) {
    var html = '', item, deep;
    for (item in list) {
        deep = typeof list[item] == 'object';
        html += '<li><a href="' +(deep ? '#' : list[item])+ '">' +item+ '</a>' +(deep ? build(list[item]) : '')+ '</li>';
    }
  console.log('message')
 return ('<ul>' + html + '</ul>' )
}
console.log(build(menu))
Я не могу понять, почему это код работает. Функция build вызывается один раз. console.log('message') находится вне цикла, но при этом срабатывает 5 раз. Так же 5 раз срабатывает return благодоря чему функция возвращает нужную разметку. Главный вопрос от которого у меня башню сносит - почему return и console.log() находятся вне цикла и их функция родитель вызывается один раз, но срабатывают они многократно?


Ответы (0 шт):