Javascript 是什么导致这个递归函数无限期地重复两次“重新开始”两个实例?

Javascript 是什么导致这个递归函数无限期地重复两次“重新开始”两个实例?,javascript,recursion,Javascript,Recursion,它记录字符串一次,然后记录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

它记录字符串一次,然后记录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)
   }

因为递归调用recuren+1使得每次递归调用中的n值都是未定义的。因此,n>10永远不会为真,递归调用会无限期地调用该函数,默认值为n=0,str=1 n+1,因为递归调用recuren+1使每次递归调用中的n值都未定义。因此,n>10永远不会为true,并且通过递归调用以默认值n=0和str=1 n+1无限期调用函数

您缺少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)
   }
工作样本:


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)
   }
工作样本:


您没有将字符串传递给递归调用站点的第一个参数,因此n得到默认值0…应该会让人爱上静态类型系统。您的recure函数包含两个参数。您在函数末尾只传递了一个参数。顺便说一句,recure拼写为recuri如果您已经完成了最基本的调试,您就不会问这个问题。您没有在递归调用站点向第一个参数传递字符串,所以n得到默认值0…应该会让人爱上静态类型的系统。您在函数末尾只传递了一个。顺便说一句,recure的拼写是recurIf如果您已经完成了最基本的调试,您就不会问这个问题了。