0

我读到在 JS 中,stings 是不可变的,即使 JS 的默认值似乎是“按引用传递”,在递归层次结构中传递相同的字符串不会附加到相同的字符串,而是创建副本。

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

4

2 回答 2

0

您可以使用包装器对象模拟原始值的引用传递。这涉及更改您的功能以意识到这一点:

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

当然,如果您愿意,包装器对象可以变成包装器类。

*JS 只通过引用传递对象,而不是原始值

于 2013-11-15T11:05:09.377 回答
0

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

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)

    
}`
于 2020-09-18T16:18:15.147 回答