16

V8でメモリはどのように管理されているのだろうか。この例を見てください:

function requestHandler(req, res){
  functionCall(req, res);
  secondFunctionCall(req, res);
  thirdFunctionCall(req, res);
  fourthFunctionCall(req, res);
};

var http = require('http');
var server = http.createServer(requestHandler).listen(3000);

reqおよびres変数はすべての関数呼び出しで渡されます。私の質問は次のとおりです。

  1. V8はこれを参照で渡しますか、それともメモリにコピーを作成しますか?
  2. 参照によって変数を渡すことは可能ですか、この例を見てください。

    var args = { hello: 'world' };
    
    function myFunction(args){
      args.newHello = 'another world';
    }
    
    myFunction(args);
    console.log(args);
    

    最後の行は、次のconsole.log(args);ように出力されます。

    "{ hello: 'world', newWorld: 'another world' }"
    

ヘルプと回答をありがとう:)

4

1 に答える 1

25

それは、参照渡しが意味するものではありません。参照渡しはこれを意味します:

var args = { hello: 'world' };

function myFunction(args) {
  args = 'hello';
}

myFunction(args);

console.log(args); //"hello"

そして、上記は不可能です。

変数にはオブジェクトへの参照のみが含まれ、オブジェクト自体ではありません。したがって、オブジェクトへの参照である変数を渡すと、その参照はもちろんコピーされます。ただし、参照されているオブジェクトはコピーされません。


var args = { hello: 'world' };

function myFunction(args){
  args.newHello = 'another world';
}

myFunction(args);
console.log(args); // This would print:
    // "{ hello: 'world', newHello: 'another world' }"

はい、それは可能であり、コードを実行するだけで確認できます。

于 2012-08-12T15:52:21.743 に答える