我读到在 JS 中,stings 是不可变的,即使 JS 的默认值似乎是“按引用传递”,在递归层次结构中传递相同的字符串不会附加到相同的字符串,而是创建副本。
我的场景需要创建一次单个字符串对象,并在递归和其他函数的非常深且长的层次结构中传递,那么我该如何实现呢?我是一个 C++ 人,在 C++ 中这很容易......只需通过引用传递,所有函数都在同一位字符串上工作。
我读到在 JS 中,stings 是不可变的,即使 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
当然,如果您愿意,包装器对象可以变成包装器类。
*JS 只通过引用传递对象,而不是原始值
您可以传递数组/字符串对象,因为它们是通过引用传递的,类似于下面的代码来查找子序列我已经传递了字符串数组(输出)来存储在每次调用中传递的所有子序列`
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)
}`