Непредвиденное поведение простейшей функции 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))
console.log('message') находится вне цикла, но при этом срабатывает 5 раз.
Так же 5 раз срабатывает return благодоря чему функция возвращает нужную разметку.
Главный вопрос от которого у меня башню сносит - почему return и console.log() находятся вне цикла и их функция родитель вызывается один раз, но срабатывают они многократно?