Node.js中的代码是否正确? (可变范围)

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? 我担心的是(关于variables范围),当人A碰到页面并且通过processUserObject ,可能需要很长时间,在此期间,人员B碰到页面并且改变uuu …导致console.log输出人员B的ID而不是人员A的ID。

附注:我有这个担心,因为当我刚接触Node.js时,我忘了使用var初始化一些variables。 当我的网站有很多的点击,我的用户注意到,他们从其他用户的点击获取信息…哎哟。

是的, console.log(uuu)会logging正确的值。 当你这样说的时候:

 var uuu = req.params.userid; 

您正在捕获本地variablesuuureq.params.userid的当前值,然后通过callback闭包捕获uuu 。 但是,如果你不小心做到了这一点:

 uuu = req.params.userid; 

然后你会捕获全局 uuureq.params.userid值,并且你的每个callback函数都会共享相同的uuu并且你会遇到通常的closures问题。 你的每一个

 function(user_object) { ... } 

匿名函数是独立的,独立的实体,它们有自己独立和不同的uuuvariables(当然,你说var uuu而不是uuu )。

顺便说一句,如果你每秒钟做了十亿个请求,那么你的超负荷工作CPU的热量将会融化这个世界与下一个世界之间的墙壁,从而释放R'lyeh的老神。 如果发生这种情况, uuu根本就不重要。