Javascript 我能';我不明白这里的逻辑

Javascript 我能';我不明白这里的逻辑,javascript,ecmascript-6,Javascript,Ecmascript 6,我写了一个函数来转换成拉丁语 结果:glovay 预期:奥维格利 第一次执行函数PrepareConAnts时 str = 'glove' prepared = 'loveg' 第二次 str = 'loveg' prepared = 'ovegl' 第三次 str = 'ovegal' prepared = '' 未满足条件prepared.length>0,因此它应返回str+'ay' 但不,它会回到这里,返回到translat

我写了一个函数来转换成拉丁语

结果:glovay

预期:奥维格利

第一次执行函数PrepareConAnts时

   str      = 'glove'
   prepared = 'loveg'
第二次

   str      = 'loveg'
   prepared = 'ovegl'
第三次

 str      = 'ovegal'
 prepared = ''
未满足条件prepared.length>0,因此它应返回str+'ay'

但不,它会回到这里,返回到translate函数。 它将递归调用函数PrepareConants,调用次数比我预期的多2倍

if(prepared.length > 0) {
    debugger;
    prepareCononants(prepared);
  }

  debugger;//here

  return str + "ay";

代码:

函数翻译拉丁语(str){
let word=preparevowles(str);
如果(字长>0){
返回词;
}
返回准备函(str);
}
功能准备世界(str){
让元音=[
‘a’、‘e’,
“i”、“o”,
“你”
];
返回元音。映射((元音)=>{
如果(元音===str[0]){
返回str+‘方式’;
}
})
.filter((字)=>{
返回单词!=null;
})
.toString();
}
函数prepareConants(str){
调试器;
让辅音=[
‘b’、‘c’,
‘d’、‘f’,
‘g’、‘h’,
"j","k",,
“l”,“m”,
‘n’、‘p’,
"q","r",,
‘s’、‘t’,
“v”、“w”,
“x”,“y”,
“z”
];
let prepared=辅音.map((val)=>{
如果(str[0]==val){
设word=str.substring(1,str.length);
word+=str[0];
返回词;
}})
.filter((字)=>{
返回单词!=“未定义”;
})
.toString()
.替换(/,/g,);
如果(准备就绪,长度>0){
调试器;
制备剂(已制备);
}
调试器;
返回str+“ay”;
}
控制台日志(翻译为拉丁语(“手套”)问题在于:

if (prepared.length > 0) {
    prepareCononants(prepared);
}
return str + "ay";
您仍在再次执行该函数,但返回第一个结果。你应该做:

if (prepared.length > 0) {
    return prepareCononants(prepared);
}
return str + "ay";
这会输出“oveglay”

问题在于:

if (prepared.length > 0) {
    prepareCononants(prepared);
}
return str + "ay";
您仍在再次执行该函数,但返回第一个结果。你应该做:

if (prepared.length > 0) {
    return prepareCononants(prepared);
}
return str + "ay";

这将输出“oveglay”

Sorry prepared.length>0那么“back here”是什么意思?您的代码作为书面输出“glovay”。从你的描述中不清楚你到底在问什么?所以当它遇到返回str+“ay”时,它应该返回到translateUpLatin函数。这是预期的结果,但它将返回到倒数第二行(调试器)的PrepareConants函数中,这里很难解释这个问题。我正试着这么做。理解此问题的简单方法是在console中运行代码,您将立即理解。谢谢。抱歉,准备就绪。长度>0那么“回到这里”是什么意思?您编写的代码输出为“glovay”。从你的描述中不清楚你到底在问什么?所以当它遇到返回str+“ay”时,它应该返回到translateUpLatin函数。这是预期的结果,但它将返回到倒数第二行(调试器)的PrepareConants函数中,这里很难解释这个问题。我正试着这么做。理解问题的简单方法是在控制台中运行代码,您将立即理解。谢谢。非常感谢,这就是问题所在。我怎么能接受这个正确答案?很乐意帮忙!在向上投票/向下投票按钮周围应该有一个复选标记。明白了。再次感谢!非常感谢,这就是问题所在。我怎么能接受这个正确答案?很乐意帮忙!在向上投票/向下投票按钮周围应该有一个复选标记。明白了。再次感谢!