0

我正在使用formidablegithub),但我不确定回调中某些变量的范围。我的部分代码是:

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');
    });

    ...

}

我的问题是,id回调内部的值是什么parse?此外,如果超过 1 个人正在上传文件,该代码会按预期工作吗?(如,id如果第一人和第二人同时使用上传器,则会更改其值。

4

1 回答 1

2

id是你定义的,是的,如果有多个调用,它将起作用upload:该id变量是upload函数调用的本地变量。这里的作用域是形成所谓闭包的函数调用。

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

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.

于 2013-06-24T10:48:37.177 回答