gpt4 book ai didi

javascript - 为什么传递给我的递归函数的参数没有更新其值?

转载 作者:行者123 更新时间:2023-11-28 17:58:18 26 4
gpt4 key购买 nike

我只是在玩简单的递归和函数。没什么太严重的,但没有达到我的预期:

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

console.log(recursive(5))

这完成了循环并正常运行,但我想知道为什么“最终”输出是“6”。为什么在所有递归完成后我没有得到 x 的“最终”值?

最佳答案

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 个不同的 x 变量在加法器的 5 个不同上下文中......

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

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

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

关于javascript - 为什么传递给我的递归函数的参数没有更新其值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44070585/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com