function user(req,res){
var uuu = req.params.userid;
processUserObject(uuu, function(user_object){ //This could take a long time...
console.log(uuu);
res.send(JSON.stringify(user_object));
});
};
app.get('/:userid',function(req,res){
user(req,res);
});
首先,假设该网站获得了大量的点击量。 (每秒数千!)
当用户使用其ID访问该页面时,console.log(uuu)
会输出正确的ID吗?我担心(关于变量范围)是当人A点击页面并经过processUserObject
时,可能需要很长时间,在此期间B人点击页面并且更改uuu < /strong>...resulting在console.log中输出人B的ID而不是人A的ID。
旁注: 我有这种担心,因为当我刚接触Node.js时,我忘了用var
初始化一些变量。当我的网站获得大量点击时,我的用户注意到他们从其他用户的点击中获取信息...哎哟。
答案 0 :(得分:5)
是的,console.log(uuu)
会记录正确的值。当你这样说:
var uuu = req.params.userid;
您正在捕获局部变量req.params.userid
中的uuu
的当前值,然后回调闭包捕获uuu
。但是,如果你不小心这样做了:
uuu = req.params.userid;
然后您将在全局 req.params.userid
中捕获uuu
值,并且每个回调都共享相同的uuu
强>你有通常的关闭问题。
function(user_object) { ... }
匿名函数是具有独立且不同的uuu
变量的独立且不同的实体(假设您当然说var uuu
而不是uuu
)。
uuu
根本不重要。