JavaScript递归函数的返回值

16

不想为扩展之前的问题开一个新问题:

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

这个返回值是iteration = 5但结果未定义?这怎么可能?我明确地返回了sWord。它应该返回“hahalollollollollol”,只是为了双重检查,如果我在返回sWord之前警报(alert)sWord,它正确地显示出来。


4
这个回答对你有帮助吗?递归函数返回 undefined - ggorlen
4个回答

32

你必须返回整个堆栈:

func2.call(this, sWord);

should be:

return func2.call(this, sWord);

5
你需要返回递归的结果,否则该方法会隐式地返回undefined。请尝试以下操作:
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;
    }
  }
}

0
保持简单 :)

您的代码已在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;
    }

我非常确定ctest应该是一个类构造函数。而且你还没有解决实际问题。 - gre_gor

0

你的外部函数没有 return 语句,因此它返回 undefined


外部函数应该是一个类的构造函数。它不需要返回任何东西。OP 明显在调用 func1 - gre_gor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接