我正在尝试通过使用函数参数显示我的名字,但是,在运行我的代码时,我收到错误 超出最大调用堆栈大小 。 我必须能够通过参数更改显示的名称。
var naam;
function groet(naam){
var naam = groet();
console.log("Hey " + naam);
return naam;
}
groet("Rick");
有任何帮助吗?干杯!
答案 0 :(得分:2)
当您致电groet("Rick")
时,会拨打groet()
拨打groet()
,呼叫groet()
,呼叫groet()
...
使用像这样的参数。
function groet(naam){
console.log("Hey " + naam);
}
groet("Rick");
答案 1 :(得分:0)
你的函数是递归的(它自己调用)。您缺少递归工作的关键要求,基本情况。基本情况是您不再调用函数本身的条件。
答案 2 :(得分:0)
由于OP没有回答问题,因此很难确定他们的混淆所在。我猜他们不理解recursion(一个自称的函数):
function groet(naam){
var naam = groet();//Call to self
console.log("Hey " + naam);
return naam;
}
此实施缺少recursive termination。递归算法需要具有最终会阻止方法调用自身的条件。
这个算法缺乏这样的条件所以我们得到的异常基本上告诉我们我们无限次地调用了我们的函数。
OP给了我们这个条件:我必须能够通过参数更改显示的名称。
为此,我们所需要的只是Ben West发布的内容:
function groet(naam){
console.log("Hey " + naam);
return naam;
}
groet("Rick");
因为变量是它的本质......变量。解决具有变量名称的问题不需要递归。因此可以删除递归。 OP可能需要return naam
。例如,如果naam
是一个人为的例子,实际上它们正在修改实现中naam
的值。默认情况下,JavaScript将在此处返回undefined。