Когда вы передаете переменную 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;