Angularjs: zrozumienie dyrektywy rekurencyjnej

Znalazłem tutaj świetną dyrektywę drzewa. Oryginalny:http://jsfiddle.net/n8dPm/

Starałem się zrozumieć jego funkcjonowanie poprzez kilka innych pytań SO,1,2 . Nie mogłem zrozumieć, w jaki sposób wywołania rekurencyjne powodują działanie dyrektywy drzewa. Głównie funkcja kompilacji

Kiedy zadzwoniła cała funkcja kompilacji?Kiedy funkcja $ compile jest buforowana w varibalecompiledContents (czy jest to funkcja łącza?), a kiedy dołącza? Dlaczego nie jest zawsze dołączany?

-

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); 
                });
            };
        },

questionAnswers(1)

yourAnswerToTheQuestion