オブジェクトが関数に渡される場合、オブジェクトは値によって渡されます (ただし、オブジェクトの値は参照です)。非常に大きなオブジェクトを関数に渡していますが、関数内から少数のプロパティ (6 ~ 12) にしかアクセスしていません。メモリ的には、オブジェクト全体ではなくプロパティのみを渡す方がよいでしょうか? または、プロパティが文字列の場合、これにより実際にメモリの問題がさらに発生しますか?
以下の 2 つの関数を考えると、メモリ単位で何が起こるでしょうか? f1 では、javascript/v8 はメモリ内に新しいオブジェクト foo を作成しますか、それとも本当に単なるポインターですか? 文字列プロパティにアクセスした場合、それは単なるポインタのままですか、それとも V8 は関数内で使用するためにその文字列のコピーを作成しますか? f2 では、文字列 foo の完全に新しいコピーが関数用に作成されると想定しています。これは正しい仮定ですか?
function f1(x) {
var y = x.foo;
}
function f2(foo) {
var y = foo;
}
var obj = {foo: "test"};
f1(obj);
f2(obj.foo);