javascript retorno de la función recursiva

Odio abrir una nueva pregunta para una extensión a la anterior:

function ctest() {
    this.iteration = 0;
    this.func1 = function() {
        var result = func2.call(this, "haha");
        alert(this.iteration + ":" + result);
    }
    var func2 = function(sWord) {
        this.iteration++;
        sWord = sWord + "lol";
        if ( this.iteration < 5 ) {
            func2.call(this, sWord);
        } else {
            return sWord;
        }
    }
}

esto devuelve iteración = 5 pero el resultado NO SE HA DEFINIDO? Cómo es eso posible ? Yo devuelvo explícitamente sWord. Debería haber devuelto "hahalollollollollolol" y solo por doublecheck, si me alerta (sWord) justo antes de la devolución sWord, se muestra correctamente.

Respuestas a la pregunta(5)

Su respuesta a la pregunta