一言不合,
翠花,
上酸菜!
// 随便写个函数哈
var arr=[];
for(var i=0;i<3;i++){arr[i]=function(){return i;}
}
// 你猜会怎么输出
console.log(arr[0]());//3
console.log(arr[1]());//3
console.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]());//0
console.log(arr[1]());//1
console.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]());//0
console.log(arr[1]());//1
console.log(arr[2]());//2
var 要哭了,真的,怎么可以这样,
卑鄙!下流!无耻!打码
…