Angularjs: понимание рекурсивной директивы

Я нашел здесь замечательную директиву о деревьях. Оригинал:http://jsfiddle.net/n8dPm/

Я пытался понять функционирование этого через пару других вопросов SO, 1,2 , Я не могЯ не совсем понимаю, как работают рекурсивные вызовы для отображения директивы дерева. В основном функция компиляции

Когда все функции компиляции вызваны?Когда функция $ compile кэшируется в переменнуюcompiledContents (это функция ссылки?) и когда она добавляется? Почему он не добавляется всегда?

-

compile: function(tElement, tAttr) {
            var contents = tElement.contents().remove();
            var compiledContents;
            return function(scope, iElement, iAttr) {
                if(!compiledContents) {
                    compiledContents = $compile(contents);
                }
                compiledContents(scope, function(clone, scope) {
                         iElement.append(clone); 
                });
            };
        },

Ответы на вопрос(1)

Ваш ответ на вопрос