объект изменился после передачи в другую функцию - PullRequest
0 голосов
/ 02 ноября 2018

Как можно изменить объект после передачи в другую функцию? Например:

var app = require('express')();
var http = require('http').Server(app);

app.get('/', function (request, response) {
    response.sendFile(__dirname + '/index.html');
});

«http» уже создан с использованием ранее определенного «app».

Затем маршрут устанавливается с помощью app.get. Но как это возможно? Как http-сервер будет иметь доступ к этому маршруту, определенному после назначения?

1 Ответ

0 голосов
/ 02 ноября 2018

Когда вы передаете переменную object в качестве аргумента функции в Javascript, она передается по ссылке. Поэтому, когда вы вносите изменения в app вне http, изменения видны в http, потому что вы внесли изменения в тот же старый объект, ссылка на который была передана в http.

Рассмотрим этот пример:

function print(obj) { // -- this is Http in your case
    setTimeout (()=> { console.log(obj.a); } , 1000);
}

var my_obj = { a: 100 }; // -- this is app in your case

print(my_obj); // -- this is passing app to http in your case

my_obj.a = 101; // -- this is adding a route to app in your case

В консоль войдет 101. Потому что реальный объект изменяется до 1000 миллисекунд. Глобальный контекст и функция все еще ссылаются на один и тот же объект . Это доказывает, что объекты передаются по ссылке в Javascript.

Если вы удалите setTimeout, тогда в консоль войдет 100, вот фрагмент:

function print(obj) { 
    console.log(obj.a);
}

var my_obj = { a: 100 }; 

print(my_obj);

my_obj.a = 101; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...