了解闭包(函数的函数)的肯定知道,输出的是10个10,但是你要具体解释呢?
function test() { var arr=[]; for(var i=0;i<10;i++){ arr[i]=function () { console.log(i); } } return arr; } var myArr=test(); for(var j=0;j<10;j++){ myArr[j](); } //10,10,10,10,10,10,10,10,10,10
我们需要知道console.log(i);这句是在什么时候调用的;
return出去的时候还未被调用;
是在给arr全部都返回出去了,才去调用的;
此时i早已变成10了。
test执行完后,test和ao已经断线。但是他的ao没有销毁的,被arr里面function有另一条线连接着;
test里面的AO,i变量现在的结果是10,而且被arr里面每个function拽住;
如想正确输入0,1,2,3,4,5,6,7,8,9,10
1.立即执行函数
function test() { var arr=[]; for(var i=0;i<10;i++){ (function(j){ arr[j]=function () { console.log(j); } })(i) } return arr; } var myArr=test(); for(var j=0;j<10;j++){ myArr[j](); } //0,1,2,3,4,5,6,7,8,9,10
2.借用外部的参数
function test() { var arr=[]; for(var i=0;i<10;i++){ arr[i]=function (num) { console.log(num); } } return arr; } var myArr=test(); for(var j=0;j<10;j++){ myArr[j](j); } //0,1,2,3,4,5,6,7,8,9,10