0

我用javascript编写了以下程序:

function recursiveSum(a) {
  sum = 0;
  for (i=0;i<a.length; ++i) {
      if (typeof a[i] === "number") {
          sum += a[i];
      } else if (a[i] instanceof Array) {
          sum += recursiveSum(a[i]);
      }
  }
  return sum;
}
function arraySum(a) {

    // i will be an array, containing integers, strings and/or arrays like itself.
    // Sum all the integers you find, anywhere in the nest of arrays.

    return recursiveSum(a);
}

而且我不知道为什么结果arraySum([[1,2,3],4,5]) 是 6。为什么不处理第一个数组之后的元素?

4

2 回答 2

7

全局变量有问题。您需要使用var,它不是可选的。

两者sum和都i需要用 声明var

var sum = 0;
for (var i=0;i<a.length; ++i) {
于 2013-10-09T14:26:43.813 回答
4

您的sumi变量是全局变量,因为您没有将它们声明为函数的本地变量。你正在成为隐式全球恐怖的牺牲品。这主要是i导致您的特定输入出现问题的变量:由于您的第一个条目a是一个数组,i因此通过递归调用递增,并且数组中的最后两个条目永远不会被外部调用处理。(但如果您使用过[1, 2, [3, 4, 5]],则呼叫共享两者的事实i sum造成麻烦。)

放在var他们每个人的面前。还要考虑使用新的严格模式,这会使这个错误成为一个有用的错误。

于 2013-10-09T14:27:55.700 回答