将可运行的if else语句转为带return的函数后无法执行,求排查
函数无法运行的原因分析
- 无限递归调用:函数
calcTot内部直接执行了var totalCharge = calcTot(79.99);,这会导致函数在执行时立刻触发自身调用,形成无限递归,最终浏览器会因为调用栈溢出而报错,函数无法正常完成执行。 - 参数被内部变量覆盖:函数的入参是
merchTot,但内部又用var merchTot = prompt("What is your total?");重新声明并赋值,直接覆盖了传入的参数值,导致传入的参数完全失效,逻辑出现混乱。 - return语句阻断后续代码执行:
return orderTot;语句会直接终止函数执行,其后的alert(calcTot(79.99));永远不会被执行,而且这段代码本身也属于递归调用,逻辑完全错误。 - 逻辑顺序混乱:函数还没执行到核心的金额计算逻辑,就先触发了递归调用和prompt输入,导致正常的计算流程根本无法启动。
简单修正示例
如果要让函数正常工作,应该把递归调用、prompt输入移到函数外部,让函数专注于计算逻辑:
function calcTot(merchTot) { let orderTot; if (merchTot >= 100) { orderTot = merchTot; } else if (merchTot < 50.01) { orderTot = merchTot + 5; } else { orderTot = merchTot + 5 + (.03 * (merchTot - 50)); } return orderTot; } // 在函数外部获取输入并调用 var inputTot = prompt("What is your total?"); var totalCharge = calcTot(parseFloat(inputTot)); alert(totalCharge);
内容的提问来源于stack exchange,提问作者Larry Joyner
相关产品推荐
相关产品推荐

