2013-06-24 68 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