Javascript JS-在递归场景中附加到同一字符串

Javascript JS-在递归场景中附加到同一字符串,javascript,string,recursion,reference,immutability,Javascript,String,Recursion,Reference,Immutability,我了解到,在JS中,Sting是不可变的,即使JS的默认设置是“按引用传递”,在递归层次结构中传递相同的字符串不会附加到相同的字符串,而是创建副本 我的场景需要一次创建一个字符串对象,并在递归函数和其他函数的很深很长的层次结构中传递,那么我如何实现这一点呢?我是一个C++的家伙,在C++中很容易…只需按引用传递,所有函数都在相同的字符串位上工作。您可以使用包装器对象模拟原语值的按引用传递。这涉及到改变您的功能以了解: function append(strWrapper,n) { if (n

我了解到,在JS中,Sting是不可变的,即使JS的默认设置是“按引用传递”,在递归层次结构中传递相同的字符串不会附加到相同的字符串,而是创建副本


我的场景需要一次创建一个字符串对象,并在递归函数和其他函数的很深很长的层次结构中传递,那么我如何实现这一点呢?我是一个C++的家伙,在C++中很容易…只需按引用传递,所有函数都在相同的字符串位上工作。

您可以使用包装器对象模拟原语值的按引用传递。这涉及到改变您的功能以了解:

function append(strWrapper,n) {
  if (n <= 0) {
    return strWrapper;
  } else {
    strWrapper.val += n;
    return append(strWrapper, n-1);
  }
}

console.log(append({ val : '' }, 9).val); // 987654321
函数附加(strWrapper,n){

如果(n您可以传递数组/字符串对象,就像它们通过引用传递一样,类似下面的代码来查找子序列,我已经传递了字符串数组(输出),以存储在每次调用中传递的所有子序列 `

函数子序列(输入、输出){
if(input.length==0)
{
输出[0]=“”;
返回1;
}
设smallStr=input.substr(1);
设smallerSeqSize=子序列(smallStr,输出);

对于(让i=0;我可以尝试用自己的堆栈折叠递归(希望不会溢出;)@amdixon-这不是一个选项,除了递归之外,我还有必须附加到同一字符串的对象层次结构。也许回答您最初的问题会更容易。为什么不粘贴递归调用,然后尝试说服所有人JS中没有办法使其工作?然后有人会很高兴地指出JS的方法。哟您可以使用数组存储字符串部分,然后在递归完成后将结果“连接”到一个数组中。@amdixon-这不是HTML,而是QML,我不知道jquery对具有完全不同DOM的QML有多适用等等。
function subsequence( input, output){
    if(input.length==0)
    {
        output[0]="";
        return 1;
    }

    let  smallStr = input.substr(1); 
    let  smallerSeqSize = subsequence(smallStr,output);

    for(let i=0;i<smallerSeqSize;i++){
        output[smallerSeqSize+i] = input[0]+output[i]; 
    }

    

    return 2*smallerSeqSize;
}


 function main(){

    let input = "abc";
    let output = new Array("")

    let sizeOutput = subsequence(input,output);

    console.log(output)

    
}`