回调中的Javascript变量范围
Javascript variable scope inside callbacks
我使用的是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
的值是多少?此外,如果不止一个人在上传一个文件,该代码会像预期的那样工作吗?(如中所示,如果第一个人和第二个人同时使用上传器,id
是否会更改其值。
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
。
相关文章:
- js命名空间和变量范围
- 如何确保变量范围在这个循环中得到维护
- 在两个浏览器选项卡之间共享变量范围
- 文件API中的Javascript变量范围
- javascript和jQuery的嵌套对象函数中的变量范围
- JavaScript 函数变量范围问题
- JavaScript 中变量范围的问题
- Javascript - 揭示对象和变量范围
- 主干.js(具有 Require.js)变量/范围访问问题
- Javascript 变量范围未定义
- 如何绕过javascript变量范围
- IE 8变量范围错误
- 了解 Javascript 变量范围
- 控制变量范围
- 函数之间的Javascript变量范围问题
- 这种减少if语句中声明的变量范围的模式是一种好的做法吗
- 用于未初始化的局部变量的javascript变量范围
- 变量范围
- 请求节点模块变量范围
- Javascript 和 JQuery dom 全局变量范围