简体   繁体   中英

Node.js V8 pass by reference

I wonder how memory is managed in V8. Take a look at this example:

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);

The req and res variables are passed in every function call, my question is:

  1. Does V8 pass this by reference or does it make a copy in memory?
  2. Is it possible to pass variables by reference, look at this example.

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

    The last line, console.log(args); would print:

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

Thanks for help and answers:)

That's not what pass by reference means. Pass by reference would mean this:

var args = { hello: 'world' };

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

myFunction(args);

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

And the above is not possible.

Variables only contain references to objects, they are not the object themselves. So when you pass a variable that is a reference to an object, that reference will be of course copied. But the object referenced is not copied.


var args = { hello: 'world' };

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

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

Yes that's possible and you can see it by simple running the code.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM