Maison > Article > interface Web > js闭包和循环
function box(){ var arr = []; for(var i=0;i<5;i++){ arr[i]=function(){ return i; } } return arr; } var b = box(); console.log(b.length); for(var i=0;i<b.length;i++){ console.log(b[i]()) }
上面的代码会打印出5个5
因为b[i]()调用的是匿名函数,然而匿名函数并没有自我执行,所以等到调用的时候,box()已经执行完毕。。。。
下面改一下:
function box(){ var arr = []; for(var i=0;i<5;i++){ arr[i]=( function(num){ console.log("ccc="+num) return num; } )(i) } return arr; } var b = box(); console.log(b.length); for(var i=0;i<b.length;i++){ console.log(b[i]) }
执行结果:
num=0 num=1 num=2 num=3 num=4 5 0 1 2 3 4
修改后让匿名函数自我执行,导致最后b[i]返回的是数组而不再是函数了