You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用函数参数显示姓名遇Maximum call stack size exceeded错误求助

解决Maximum call stack size exceeded错误的方案

你碰到的这个Maximum call stack size exceeded错误,本质是无限递归调用导致的——你的groet函数内部一直在自己调用自己,没有停下来的条件,把浏览器的调用栈给撑爆了。

先拆解下原代码里的问题:

  • 你已经把naam作为函数参数传进来了,但函数内部又写了var naam = groet();,这行代码会直接再次调用groet函数(还没传参数),形成了无限循环的调用链。
  • 全局的var naam;其实是多余的,函数参数已经能提供你需要的变量了。

直接修正后的代码如下:

function groet(naam) {
  console.log("Hey " + naam);
  return naam;
}
groet("Rick"); // 会输出 "Hey Rick"

如果想让函数更健壮,比如没传参数时显示默认姓名,可以给参数加个默认值:

function groet(naam = "Guest") {
  console.log("Hey " + naam);
  return naam;
}

groet("Rick"); // 输出 Hey Rick
groet(); // 没传参数时输出 Hey Guest

简单总结下错误根源:每次调用groet("Rick"),函数内部都会触发新的groet()调用,这个新调用又会触发下一次,无限重复下去,直到浏览器的调用栈达到最大限制,就抛出了栈溢出的错误。去掉内部的递归调用,直接使用传入的参数就解决问题啦。

内容的提问来源于stack exchange,提问作者Rick Chardet

火山引擎 最新活动