TIM*_*MEX 1 javascript oop 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);
});
Run Code Online (Sandbox Code Playgroud)
首先,假设该网站获得了大量的点击.(每秒数千!)
当用户使用他的ID点击页面时,会console.log(uuu)输出正确的ID吗?我担心的(关于变量范围)是当人A点击页面并通过时processUserObject,可能需要很长时间,在此期间B人员点击页面并更改uuu ...导致console.log到输出人B的ID而不是人A的ID.
旁注:我有这种担心,因为当我刚接触Node.js时,我忘了用一些变量初始化var.当我的网站获得大量点击时,我的用户注意到他们从其他用户的点击中获取信息...哎哟.
是的,console.log(uuu)将记录正确的值.当你这样说:
var uuu = req.params.userid;
Run Code Online (Sandbox Code Playgroud)
您正在捕获req.params.userid局部变量中的当前值,uuu然后uuu由回调闭包捕获.但是,如果你不小心这样做了:
uuu = req.params.userid;
Run Code Online (Sandbox Code Playgroud)
然后你将捕获全局中的req.params.userid值,并且每个回调将共享相同的内容,并且您将遇到常见的闭包问题.你的每一个 uuuuuu
function(user_object) { ... }
Run Code Online (Sandbox Code Playgroud)
匿名函数是具有各自独立uuu变量的独立且不同的实体(假设您说var uuu而不是uuu当然).
顺便说一句,如果你最终得到每秒十亿次请求,过度工作的CPU的热量将融化这个世界和下一个世界之间的隔离墙,从而释放出来的R'lyeh的老神.如果发生这种情况,uuu根本不重要.