使用函数参数显示姓名遇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




