如何将对象传递给另一个函数后进行更改? 例如:
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服务器将如何访问此路由?
答案 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;