2017-01-20 20 views
1

它記錄字符串一次,日誌0然後1和0和1再次無限期 - 爲什麼? 遞歸發生兩次,然後重新開始,是什麼導致它迴歸兩次然後將n重置爲0?什麼導致這個遞歸函數無限期地重複兩次重新開始兩次實例?

function recure(str,n=0){ 
    if(n>10){ 
     console.log("The End"); 
     return ""; 
    } 
    console.log(n); 
    console.log(str) 
    setTimeout(function(){recure(n+1)},1500) 
    } 
+4

你不是在遞歸調用網站傳遞一個字符串的第一個參數,所以'N'得到默認的'0'。 –

+1

...應該讓一個人愛上靜態類型系統。 –

+0

你的recure函數有兩個參數。你只在函數的末尾傳遞一個。 –

回答

1

因爲遞歸調用recure(n+1)使得n在每一個遞歸調用爲未定義值。因此,(n>10)永遠不會成立,函數被無限期調用,默認值n=0str=1 (n+1)來自遞歸調用

3

您在setTimeout函數中缺少第二個參數。試試這個:

function recure(str,n=0){ 
    if(n>10){ 
     console.log("The End"); 
     return ""; 
    } 
    console.log(n); 
    console.log(str) 
    setTimeout(function(){recure(str, n+1)},1500) 
    } 

工作樣本:

https://jsfiddle.net/mspinks/2y7q68ny/