可能重复: Javascript内部循环闭包-简单实用示例
让我们想象一下,您在如下的for-循环中创建了一些ajax请求:
$(function(){
for(var i=0;i<10;i++){
$.ajax({
url : '/',
success : function(){
console.log('callback '+i+' fired!');
}
});
}
});当然,回调每次都会记录“回调10”,因为回调是异步执行的。问题是:你怎么知道哪个回调被触发了?
小提琴
发布于 2012-11-25 21:20:09
匿名自调用函数将解决这个闭包问题:
$(function(){
for(var i=0;i<10;i++){
(function(i) {
$.ajax({
url : '/',
success : function(){
console.log('callback '+i+' fired!');
}
});
})(i);
}
});发布于 2012-11-25 21:21:29
使用立即调用的函数表达式创建作用域:
$(function(){
for(var i=0;i<10;i++){
(function(i){
$.ajax({
url : '/',
success : function(){
console.log('callback '+i+' fired!');
}
});
})(i);
}
});发布于 2012-11-25 21:21:02
通过将i的当前值作为闭包的一部分传递:
$(function(){
for(var i=0;i<10;i++){
$.ajax({
url : '/',
success : (function(i){
return function(){console.log('callback '+i+' fired!');}
})(i)
});
}
});下面是一个演示:http://jsfiddle.net/rRwgW/4/
注意:您实际上不需要将整个ajax调用包装在IIFE中,只需要引用i的值的回调。
https://stackoverflow.com/questions/13555582
复制相似问题