16

Hate to open a new question for an extension to the previous one:

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

this returns iteration = 5 but result UNDEFINED ? how is that possible ? i explicitly return sWord. It should have returned "hahalollollollollol" and just for doublecheck, if i alert(sWord) just before the return sWord it displays it correctly.

1

4 Answers 4

32

You have to return all the way up the stack:

func2.call(this, sWord);

should be:

return func2.call(this, sWord);
Sign up to request clarification or add additional context in comments.

Comments

5

You need to return the result of the recursion, or else the method implicitly returns undefined. Try the following:

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 ) {
        return func2.call(this, sWord);
    } else {
        return sWord;
    }
  }
}

Comments

0

Your outer function doesn't have a return statement, so it returns undefined.

1 Comment

The outer function is supposed to be a class constructor. It doesn't need to return anything. OP is clearly calling func1.
0

keep it simple :)

your code modified in JSFiddle

iteration = 0;
func1();

    function  func1() {
        var result = func2("haha");
        alert(iteration + ":" + result);
    }

    function func2 (sWord) {
        iteration++;

        sWord = sWord + "lol";
        if ( iteration < 5 ) {
            func2( sWord);
        } else {

            return sWord;
        }

    return sWord;
    }

1 Comment

I am pretty sure ctest is supposed to be a class constructor. And you still didn't fix the actual problem.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.