JS の文字列は不変であり、JS のデフォルトは「参照渡し」のように見えますが、再帰階層で同じ文字列を渡すと、同じ文字列に追加されず、コピーが作成されることを読みました。
私のシナリオでは、単一の文字列オブジェクトを一度作成し、再帰関数やその他の関数の非常に深く長い階層で渡す必要があるため、どうすればこれを実現できますか? 私は C++ 派ですが、C++ では非常に簡単です... 参照渡しするだけで、すべての関数が同じ文字列で動作します。
JS の文字列は不変であり、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 は、プリミティブ値ではなく、オブジェクトに対してのみ参照渡しを行います