var v1=0,v2=0,v3=0;
for(var i=1;i<=3;i++){
var i2=i;
(function(){
var i3=i;
setTimeout(function(){此处执行的时候for循环已经结束 i=4固定值;i2=3固定值;i3为1 2 3 循环三次
v1 +=i;
v2 +=i2;
v3 +=i3;
console.log(v1,v2,v3);执行三次// 4 3 1 - 8 6 3 -- 12 9 6
},1);
})()
};
//console.log(v1,v2,v3);
setTimeout(function(){
console.log(v1,v2,v3);
},100)
setTimeout与 自执行函数结合时,settimeout执行时for循环已经结束自执行函数外部变量的值都已经固定 ;内部的settimeout执行i次,i分别为1 , 2...i,执行i次。
for(var j=0;j<10;j++){
(function(e){
setTimeout(function(){
console.log(e);
},1000);
})(j)
}//0.1.2...9