Javascript 递归函数根据数组元素求和的顺序返回不同的值

Javascript 递归函数根据数组元素求和的顺序返回不同的值,javascript,arrays,recursion,sum,elements,Javascript,Arrays,Recursion,Sum,Elements,我实现了下面的递归JS函数来获取数组中元素的总和。此函数工作正常,当输入[1,2,3]时返回6,这是正常的 function sumOfNumbers(array) { if (array.length == 1) { return array[0]; } else { last = array.length - 1; return array[last] + sumOfNumbers(array.slice(0, last));

我实现了下面的递归JS函数来获取数组中元素的总和。此函数工作正常,当输入[1,2,3]时返回6,这是正常的

function sumOfNumbers(array) {
    if (array.length == 1) {
        return array[0];
    } else {
        last = array.length - 1;
        return array[last] + sumOfNumbers(array.slice(0, last));
    }
}
但是,将总和的顺序更改为:

    return sumOfNumbers(array.slice(0,last)) + array[last];

对于[1,2,3],它返回5。有人知道为什么吗?

因为变量
last
是全局变量,您在调用
sumOfNumbers(array.slice(0,last))
后,在这部分之前:
array[last]
看到它。

这实际上是真的,谢谢!我最后改成了var,并且在任何顺序下都能很好地工作。你为什么要递归地这样做呢?浪费内存,只需使用一个循环。不,我正在学习递归算法