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

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

  • 相关阅读:
    域渗透基础(二)
    域渗透基础(一)
    域环境搭建
    java基础(五)-----new一个对象的具体过程
    数据结构(八)-----散列表
    数据结构(七)-----跳表
    数据结构(六)-----队列
    数据结构(五)-----栈
    数据结构(四)-----链表
    数据结构(三)-----数组
  • 原文地址:https://www.cnblogs.com/alphathink/p/5786834.html
Copyright © 2011-2022 走看看