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ですか? また、複数の人がファイルをアップロードしている場合、そのコードは期待どおりに機能しますか? ( id1 人目と 2 人目が同時にアップローダを使用している場合、両者の値が変更されます。

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 に答える