一言不合,
翠花,
上酸菜!

//随便写个函数哈var arr=[];for(var i=0;i<3;i++){    arr[i]=function(){        return i;    }}//你猜会怎么输出console.log(arr[0]());//3console.log(arr[1]());//3console.log(arr[3]());//3

哦,这是为什么呢?
奥,这个嘛,就是说的块级作用域问题
下面开始回归正题:
其实你这样写,结果也是一样:

var arr=[];for(var i=0;i<3;i++){    //留空}console.log(i)//太暴力了,也是3!

来看看IIFE跟闭包结合大法:

var arr=[];for(var i=0;i<3;i++){    (function(i){        arr[i].function(i){            return i;        }    })(i);}console.log(arr[0]());//0console.log(arr[1]());//1console.log(arr[2]());//2

其实,搞了半天,有个更吊炸天的技能,
都没想告诉你,知道为什么那么多人喜欢ES6,
因为真的非常666:

var arr=[];for(let i=0;i<3;i++){    arr[i]=function(){        return i;    }}//This is a Amazing world!console.log(arr[0]());//0console.log(arr[1]());//1console.log(arr[2]());//2

var 要哭了,真的,怎么可以这样,
卑鄙!下流!无耻!打码
...