function constfuncs(){
var funcs=[];
for(var i=0;i<10;i++){
funcs[i]=function(){
return i;
}
}
return funcs;
}
var func=constfuncs();
console.log(func[5]());
在刚接触闭包的时候估计很多人会想上面的输出结果是5 ,但是实际输出结果确是10。可能你会想不明白,为什么是这样的结果,看完下面的分析你就会豁然开朗了。
上面这段代码创建了10个闭包,并将它们存储到一个数组中。这些闭包都是在同一个函数调用中定义的,因次它们可以共享变量i 。当consfuncs()返回时,变量i的值是10,所有的闭包都共享这一个值,这不是我们想要的结果。这是因为关联到闭包的作用域链都是“活动的”,记住这一点非常重要。嵌套的函数不会将作用域内的私有成员复制一份,也不会对绑定的变量生成静态快照。
我想明白了这些上面的结果应该没什么困惑的了吧??