为什么参数传递给我的递归函数而不更新它的值?

时间:2017-05-19 12:49:11

标签: javascript recursion

我只是在玩简单的递归和函数。没有什么太严肃,但没有做我期望的事情:

    var recursive = function adder (x) {
  x = ++x
  if (x < 10) {
    console.log('x is now: ' + x)
    adder(x)
  }
  return x
}

console.log(recursive(5))

这样就完成了循环并正常运行,但我想知道为什么这个&#39;最终&#39;输出是&#39; 6。&#39;为什么我没有得到#final;#39;完成所有递归后x的值是什么?

1 个答案:

答案 0 :(得分:3)

x=++x;
x+=1;
x++;
++x;

您需要预增量增加运算符,或者不需要重新分配的后增量。后增量首先返回,然后递增......

alert((1)++)//1

一些正在进行的解释:

var recursive = function adder (x) {
  ++x;
  if (x < 10) {
   console.log('x is now: ' + x)
   return adder(x); //lets return our added result
  }
 return x;//if x=10 lets return 10
}

console.log(recursive(5))//will log 10

它主要没有按预期工作,因为原语通过值传递。所以在加法器的5个不同上下文中实际上有5个不同的x变量......

与基元不同,对象通过引用传递:

function adder(obj){
 obj.x++;
 if(obj.x<10){
   adder(obj);
 }
}

var test={x:1};
adder(test);
console.log(test.x);