js 闭包

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,所有的闭包都共享这一个值,这不是我们想要的结果。这是因为关联到闭包的作用域链都是“活动的”,记住这一点非常重要。嵌套的函数不会将作用域内的私有成员复制一份,也不会对绑定的变量生成静态快照。

我想明白了这些上面的结果应该没什么困惑的了吧??

posted @ 2016-08-19 11:06  学无止境-小于  阅读(156)  评论(0编辑  收藏  举报