function createFunctions () {
var result = new Array();
for(var i=0;i<10;i++){
result[i] = function(num){
return function(){
return num;
};
}(i);
}
return result;
}
createFunctions();
为什么调用了这个函数确没有任何效果,应该怎样去调用才能显示 result数组?
我不明白了,如果只是给
result
赋值,为什么要创建个闭包绕那么大个圈呢。其实就是个等于啊~假如真的有需求在循环里创建闭包,正确的姿势如下:
贴个完整的
一个function后面直接()执行,是没有意义的;
要直接调用可以让左边成为一个表达式。比如:
再次,你所要的闭包就是包含在函数内部的一个引用了自由变量被返回的一个function。
这样就能显示你想要的result数组结果了。
不过,这样做没有一点意义。完全不是闭包所提倡的。
这个是高级设计的例子吧
其实现在createFunctions()函数已经返回了result数组,而result数组的每个元素都是一个函数,这个函数都会打印出当前元素的索引值,你只调用createFunctions()函数,没有调用result数组元素对应的函数,所以你看不到任何效果