2012-05-23 11 views
6

की वापसी पिछले एक के लिए एक विस्तार के लिए एक नया सवाल को खोलने के लिए नफरत है:जावास्क्रिप्ट पुनरावर्ती क्रिया

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 वापस आते हैं। इसे "hahalollollollollol" और केवल डबल चेक के लिए वापस किया जाना चाहिए था, अगर मैं वापसी 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; 
    } 
संबंधित मुद्दे