对象传递给另一个函数后发生了变化

时间:2018-11-02 16:10:17

标签: javascript node.js express

如何将对象传递给另一个函数后进行更改? 例如:

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

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

已经使用先前定义的“ app”创建了“ http”。

然后,使用app.get设置路线。但是那怎么可能呢?分配后http服务器将如何访问此路由?

1 个答案:

答案 0 :(得分:1)

当您将 object 变量作为参数传递给Javascript中的函数时,该变量将通过引用传递。因此,当您在app之外对http进行更改时,这些更改在http中可见,因为您对传递到http的同一旧对象引用进行了更改。 / p>

考虑以下示例:

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毫秒之前就发生了变化。全局上下文和函数都仍引用相同对象。这证明了对象是通过Java引用进行传递的。

如果您删除了setTimeout,那么将有100登录到控制台,这是代码段:

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

var my_obj = { a: 100 }; 

print(my_obj);

my_obj.a = 101;