Javascript匿名函数错误

标签 javascript recursion anonymous-function

我一直在尝试使用递归在 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/

相关文章:

javascript - 修复一个递归函数,该函数采用包含其他数组在内的元素的数组。它生成一个没有其他数组作为元素的数组

algorithm - 解决以下重现: T(n) = T(n/3) + T(n/2) + sqrt(n)

java - 删除Java中的所有空文件夹

javascript - jQuery UI Slider change 和 slide 事件报告不同的结果

arrays - 如何将数组传递给匿名函数?

javascript - 为什么使用 javascript 删除元素会阻止元素迭代?

php - 将参数传递给 setInterval 调用的函数

javascript - D3 树节点双击高亮文本

javascript - Google Closure Compiler 内联了一个重复使用的私有(private)属性——一个缺陷还是我遗漏了什么?

typescript - 使用 Promises 的类型 '{}' 上不存在属性