闭包/立即执行函数问题
经典闭包问题,会数输出十次 10;
function test(){ var arr=[]; for(var i=0;i<10;i++){ arr[i]= function () { console.log(i) } } return arr } var demo=test(); for(var i=0;i<demo.length;i++){ demo[i]() }
解决这个问题可以使用立即执行函数,输出1到9
function test(){ var arr=[]; for(var i=0;i<10;i++){ (function (j) { arr[j]= function () { console.log(j) } })(i) } return arr } var demo=test(); for(var i=0;i<demo.length;i++){ demo[i]() }
那么问题来了,为什么要使用立即执行函数,普通的声明式函数也可以做到呀,有什么区别吗
function test(){ var arr=[]; for(var i=0;i<10;i++){ function fn(j) {//普通函数,也输出1到9 arr[j]= function () { console.log(j) } } fn(i) } return arr } var demo=test(); for(var i=0;i<demo.length;i++){ demo[i]() }
//菜鸟一枚,求解答