各位大神能帮我看下,下面js代码运行的时候报错堆栈溢出,求指导啊

<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>1123123123</title></he... <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>1123123123</title>
</head>
<body>
<input type="text" id="inputNum">
<button id="getResult" onclick="callee1()">计算</button>
<script type="text/javascript">
function callee1(num) {
num=document.getElementById('inputNum').value;
if (num <= 1) {
return 1;
}
else {
return num * arguments.callee(num - 1);
}
}
var c=callee1();
alert(c);
</script>
</body>
</html>
展开
 我来答
纲惠0Bb
2016-12-26 · 超过15用户采纳过TA的回答
知道答主
回答量:22
采纳率:0%
帮助的人:24.7万
展开全部

你是不是想计算,当输入n时,结果输出为

n*n-1*n-2....*1


如果是这样的,那你的写法有问题

  1. 递归的时候,每次你在callee1中读取的

    num=document.getElementById('inputNum').value;
    都是一样的
  2. 你还需要判断num的数据类型

    document.getElementById('inputNum').value的数据类型不是数字

代码严谨些比较好


修改后

<input type="text" id="inputNum">
<button id="getResult" onclick="callee2()">计算</button>
<script type="text/javascript">

function callee2(){
num= parseInt( document.getElementById('inputNum').value);
if(isNaN(num)){
throw '参数错误!';
}
console.log( callee1(num));
}

    function callee1(num) {
if (num <= 1) {
return 1;
}
else {
return num * arguments.callee(num - 1);
}
}
</script>
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式