2013-06-24 2 views
0

formidable (github)을 사용하고 있으며 콜백 내부의 일부 변수의 범위에 대해 잘 모르겠습니다. 내 코드의 부분은 다음과 같습니다자바 스크립트 가변 범위 내 콜백

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

    ... 

} 

내 질문은 parse의 콜백 내부 id의 값이 어떻게 될 것입니까? 또한, 1 명이 넘는 사람이 파일을 업로드하는 경우 해당 코드가 예상대로 작동합니까? 마찬가지로, id은 둘 다 동시에 업 로더를 사용하는 경우 첫 번째와 두 번째 사용자 모두에게 가치를 부여합니다.

답변

2

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

다음 id 변수가 upload 함수의 호출에 로컬 여기 범위는 여기에 closure

이라고 무슨 형성하는 함수 호출 코드의 단순화 된 버전은 것입니다로그에는 0, 1, 2이 기록됩니다.

+0

위대한 : 감사합니다! – alexandernst