2012-05-23 94 views
6

返回恨打開一個新的問題延期到前一個:JavaScript的遞歸函數

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

這將返回迭代= 5,但導致未定義?這怎麼可能?我明確地返回sWord。它應該返回「hahalollollolloll」,只是爲了雙重檢查,如果我提醒(sWord)就在返回sWord之前它正確顯示它。

回答

14

你必須返回一路堆棧:

func2.call(this, sWord); 

應該是:

return func2.call(this, sWord); 
0

您的外部函數沒有return語句,因此它返回undefined

4

您需要返回遞歸,否則該方法隱含返回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; 
    } 
    } 
} 
1
func2.call(this, sWord); 

應該

return func2.call(this, sWord); 
0

保持簡單:)

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