今天对以前写的一段代码产生了疑惑,请问是不是在任何情况下,这两个值都相同?
exports.ts=function(data,callback){
var query={_id:data.id};
//var oldid=retextra(data.id);
Mydb.findOne(query,{},{},function(err,result){
if(err){
console.log('Err:'+err);
return callback(err);
}
var now=new Date().getTime();
while(new Date().getTime() < now + 3000) {
}
console.log('传入值='+data.id+ ' 返回的值='+result._id);
//console.log('原来传入值通过闭包获取的值:'+oldid());
callback(err,result);
});
};
我的想法是当不断地调用这个函数,传入不同的id值,会导致在回调函数中data.id取到的值与result._id返回的值不相同,因为data的作用域与result的作用域不相同,当在回调函数中获取data时,可能取到的值不是那时传入的值。 我也试着浏览器多次调用这个方法,但总返回相同值。求解惑。 btw: 我的想法是先把data值包在闭包中,再在result中可获取当时的值。闭包函数: function retextra(exdata) { var ts = exdata; function getext() { return ts; } return getext; } 但现在也有点搞不清楚了,是不是不用闭包也可以了。