Node.js V8 pass by reference

26,521

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.

Share:
26,521
onlineracoon
Author by

onlineracoon

Dutch developer, interested in Javascript, Node.js, Backend and Frontend development of webapps and mobile apps.

Updated on March 21, 2020

Comments

  • onlineracoon
    onlineracoon over 4 years

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