function createFunctions(){
var result = new Array();
for(var i = 0; i < 10; i++){
result[i] = function(num) {
return function() {
return num;
};
}(i); //这里是什么意思?
}
return result; // result是一个函数数组
}
var funcs = createFunctions(); // 得到一个函数数组funcs
for(var i = 0; i < funcs.length; i++){
document.write(funcs[i]()+"<br/>");
}
问题如注释,那里多出来一个(i)是什么意思啊,不懂
function createFunctions(){
var result = new Array();
for(var i = 0; i < 10; i++){
result[i] = function(num) {//这里的num就是后面(i)中的值,下面三行就是这个闭包函数的返回值;看这代码就是创建了一个数组,result[0]=0;result[1]=1。
return function() {
return num;
};
}(i); //这里是什么意思?:闭包函数的用法,这里的i就是for中的i,将其传递给result[i]=function(num)的这个num
}
return result; // result是一个函数数组
}
否则,根本不需要使用闭包
嗯嗯,是闭包,学到这里,看不懂. 只是觉得function(num){...}这已经是一个完善的函数了,怎么后面会再多了个(i)呢... 请问是只有闭包才有这种用法对吗?
return function() {
return num;
};
}的调用,i是传送的参数,是实参,而function(num)中的num是形参,也就是把i付给num
...
})(i);
...
})(i);
return function() {
return num;
};
}
i是上面循环中的i这是个匿名函数后面加(i)是直接调用这个函数,把i传入进函数里num=i这时候