JS代码如下
<script type="text/javascript">
function creatF(){
var result = new Array();
for(var i=0 ;i<10; i++){
result[i] = function(){
return i;
}
}
return result;
}
var funcs = creatF();
for(var i = 0 ; i < funcs.length ; i++){
alert(funcs[i]()+"<br />");
}
</script>
这是一个理解闭包的函数 若想理解闭包 需要先理解函数的调用次序与返回值
首先分析函数的调用顺序:
1. result = new Array(); 创建了一个数组对象并命名为result
2.result[i] = function(){ return i;} 关键是要理解此处是将一个函数赋值给了result,如直接输出result[i]得到的结果如图
可以通过result[i]()来得到结果
注意此时的作用域,在闭包中,每个函数的值都指向i所以 最上方代码的执行结果result[0-9]()全部为10