callback函数的loop trap
通过循环发出多个异步执行指令(如ajax)的时候,很可能发生的一个情况是所有的callback在循环结束之后才被调用。如果callback函数中直接引用了循环的index,结果就是callback函数引用到的index是循环结束之后的index,而不是循环中即时的index。
代码举例
function(
for (i=1; i<100; i++)
working(callback,i) // error!
为了解决这个问题,可以引入wrapper function,将index缓存到函数内部的作用域中
for (i=1;i<100;i++){
(function(currentIndex){
working(callback,currentIndex))
})(i)
}
由于使用了匿名函数function(currentIndex),传入的currentIndex每次都会对应一个新的object,并在之后的执行过程中不会被修改。
网友评论