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 ...导致控制台.log以输出人B的ID而不是人A的ID。旁注:我有这种担心,因为当我不熟悉Node.js时,我忘记了使用
var
初始化一些变量。当我的网站获得大量点击时,我的用户注意到他们正在从其他用户的点击中获取信息...哎呀。 最佳答案
是的,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
)。顺便说一句,如果您确实每秒收到十亿个请求,那么您过度劳累的CPU所产生的热量将融化这个世界与下一个世界之间的墙,从而释放R'lyeh的老神。如果发生这种情况,
uuu
根本没有关系。关于javascript - 这是Node.js中正确的代码吗? (可变范围),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6590643/