callback函數(shù)的loop trap
通過循環(huán)發(fā)出多個異步執(zhí)行指令(如ajax)的時候,很可能發(fā)生的一個情況是所有的callback在循環(huán)結(jié)束之后才被調(diào)用。如果callback函數(shù)中直接引用了循環(huán)的index,結(jié)果就是callback函數(shù)引用到的index是循環(huán)結(jié)束之后的index,而不是循環(huán)中即時的index。
代碼舉例
function(
for (i=1; i<100; i++)
working(callback,i) // error!
為了解決這個問題,可以引入wrapper function,將index緩存到函數(shù)內(nèi)部的作用域中
for (i=1;i<100;i++){
(function(currentIndex){
working(callback,currentIndex))
})(i)
}
由于使用了匿名函數(shù)function(currentIndex),傳入的currentIndex每次都會對應一個新的object,并在之后的執(zhí)行過程中不會被修改。