一言不合,
翠花,
上酸菜!闭包
//随便写个函数哈 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跟闭包结合大法:code
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 要哭了,真的,怎么能够这样,
卑鄙!下流!无耻!打码
...io