我读到JS中的stings是不可变的,即使JS的默认值似乎是“通过引用传递”,在递归层次结构中传递相同的字符串也不会附加到相同的字符串,而是创建副本。
我的场景需要创建一个字符串对象,并在递归和其他函数的非常深层次的层次结构中传递,那么我该如何实现呢?我是一个C ++人,在C ++中它非常简单......只需通过引用传递,所有函数都在同一个字符串上工作。
答案 0 :(得分: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确实仅通过引用传递对象,而不是原始值
答案 1 :(得分: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)
}`