0
a = ["1","2","3"]
square = (i,cb)->
i = parseInt(i)
setTimeout()->cb null,i*i,100
for i in a
square i,(err,result)->
console.log i + " " + result
output:
3 1
3 4
3 9
expected:
1 1
2 4
3 9
如果删除setTimeout我可以得到预期的结果。javascript变量异步回调
或写这样
for i in a
((i)->
square i,(err,result)->
console.log i + " " + result
)(i)
这是一个JavaScript错误?
这是一个JavaScript代码?你可以创建一个小提琴http://jsfiddle.net? – gurvinder372
那是什么? CoffeeScript,Typescript?这不是JavaScript。 – Andy
该输出不是一个错误,它的异步工作方式。当您的超时呼叫被触发时,for循环已经完成。所以'i'保存循环中使用的最后一个值,在这种情况下是3,所以每次输出3。 –