我一直在尝试使用递归在 javascript 中使用匿名函数查找数字的总和,但出现以下错误:
Uncaught SyntaxError: Unexpected token +
我想为此使用一个匿名函数。谁能帮我找出我在这里做错了什么?
<script type="text/javascript">
console.log(function (n) {
if (n == 0) {
return 1;
}
else {
return function(n+function(n-1));
}
}(8));
</script>
最佳答案
您的操作存在几个问题。
对于初学者来说,尝试递归调用函数 (function(n+function(n-1))
) 将导致调用堆栈大小超出错误,因为您要将总和添加到每个传递给递归调用的参数。您可能想要更接近 (n + function(n-1)
) 的东西。
但是,这仍然存在问题,因为您不能递归调用匿名函数(除非使用 arguments.callee,这在严格模式下是不允许的)。
要在不为函数表达式命名的情况下执行您正在尝试执行的操作,您可以执行以下操作:
console.log(function(n) {
if (n == 0) {
return 1;
}
else {
return n + arguments.callee(n-1);
}
}(8))
但是,您也可以为您的函数表达式提供一个名称以在递归调用中引用,这也将在严格模式下工作:
console.log(function foo(n) {
if (n == 0) {
return 1;
}
else {
return n + foo(n-1);
}
}(8))
已编辑:在基本情况下 (n == 0),如果您的目标是获取从 0 到 n 的所有整数的总和,您可能希望返回 0 而不是 1。
关于Javascript匿名函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27265655/