Подтвердить что ты не робот

Node.js V8 проходит по ссылке

Интересно, как память управляется в 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' }"
    

Спасибо за помощь и ответы :)

4b9b3361

Ответ 1

Это не то, что передают по ссылке. Передача по ссылке будет означать это:

var args = { hello: 'world' };

function myFunction(args) {
  args.hello = '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' }"

Да, это возможно, и вы можете увидеть это, просто запустив код.