假设我有以下内容:
for(var i = 0; i < length; i++){ var variable = variables[i]; otherVariable.doSomething(variable, function(err){ //callback for when doSomething ends do something else with variable; }
到回调被调用时,variable将不可避免地成为所有回调的最后一个变量,而不是像我希望的那样为每个回调都不同。我意识到我可以传递variable给doSomething()回调doSomething()函数,然后将其传递回去,但它是外部库的一部分,因此我不想弄乱它的源代码。
variable
doSomething()
你们中那些比我更了解JavaScript的人,是否还有其他方法可以做我想做的事情?
谢谢,
处理这种情况的一种常见方法(如果很难看)是使用另一个函数,该函数立即被调用以创建一个用于保存变量的范围。
for(var i = 0; i < length; i++) { var variable = variables[i]; otherVariable.doSomething(function(v) { return function(err) { /* something with v */ }; }(variable)); }
请注意,在立即调用的函数内部,正在创建并返回的回调将参数引用给函数,v而不是外部variable。为了使阅读效果更好,我建议将回调的构造函数提取为命名函数。
v
function callbackFor(v) { return function(err) { /* something with v */ }; } for(var i = 0; i < length; i++) { var variable = variables[i]; otherVariable.doSomething(callbackFor(variable)); }