在 JavaScript 的递归函数中按值传递 [duplicate]

pass by value in recursive function in javascript [duplicate]

提问人:Ashy Ashcsi 提问时间:7/31/2022 最后编辑:JMPAshy Ashcsi 更新时间:7/31/2022 访问量:426

问:

计算数字中零个数的递归解决方案如下:

    const number = 3004;
   
    const countZeroes = function (num) {
        if (num == 0) {
            return;
        }
    
        if (num % 10 == 0) {
            count += 1;
        }
    
        countZeroes(parseInt(num / 10));
    }
    
    let count = 0;
    countZeroes(3004);
    console.log('the result ', count);

当我们使用 count 作为全局变量时,上述解决方案工作正常。但是,当 count 作为参考变量传递时,它不起作用。请在下面找到解决方案:

    const number = 3004;
    
    const countZeroes = function (num, count) {
        if (num == 0) {
            return count;
        }
    
        if (num % 10 == 0) {
            count += 1;
        }
    
        countZeroes(parseInt(num / 10));
    }
    
    let count = 0;
    const result = countZeroes(3004, count);
    console.log('the result ', result);

javascript 是否只允许按值传递,而不允许按引用传递。请告诉我。

JavaScript 递归 传递

评论

0赞 IT goldman 7/31/2022
对象通过引用传递。
0赞 jabaa 7/31/2022
@ITgoldman 所有参数都按值传递。变量包含对 obejcts 的引用。此行为与函数调用无关。您可以通过复制对象来观察没有函数的相同行为。JavaScript 是按引用传递还是按值传递语言?
0赞 Barmar 7/31/2022
您需要将函数的最后一行更改为return countZeroes(...)
0赞 IT goldman 7/31/2022
从技术上讲,是的,但是如果按值传递对对象的引用(对象变量是),则实际上可以通过引用传递对象。
0赞 Barmar 7/31/2022
您缺少递归调用中的第二个参数。它应该是return countZeroes(parseInt(num / 10), count);

答: 暂无答案