2013-06-24 32 views
0

变量的作用域我使用formidablegithub),我不知道的回调里面的一些变量的作用域。我的代码 部分是:里面的Javascript回调

UploadHandler.prototype.upload = function(req, res){ 
    var query = url.parse(req.url, true).query; 
    var form = new formidable.IncomingForm(); 
    var id = query['X-Progress-ID']; 

    self.uploads.add(id); 

    form.parse(req, function(err, fields, files){ 
     self.uploads.remove(id); 
     res.writeHead(200, { 'Content-type': 'text/plain' }); 
     return res.end('upload received'); 
    }); 

    ... 

} 

我的问题是,会是怎样的idparse回调中的价值?此外,如果超过1人上传文件,该代码是否能按预期工作? (如,将id改变它的两个第一,如果他们使用的上传的同时兼具第二个人价值。

回答

2

id是你定义了什么是的,它会如果有一个以上的工作来电upload:在id变量是本地upload函数调用这里的范围是构成函数调用什么叫做closure

这是你的代码的简化版本:

function upload(i){ 
    var id=i; // id is local to the invocation of upload 
    setTimeout(function(){ console.log(id) }, 100*i); 
} 
for (var i=0; i<3; i++) { 
    upload(i); 
} 

它记录了0, 1, 2

+0

太棒了:)谢谢! – alexandernst