我只是在玩简单的递归和函数。没有什么太严肃,但没有做我期望的事情:
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的值是什么?
答案 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);