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

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

  • 相关阅读:
    Hdu 5073 Galaxy 精度问题
    HDU 4435 charge-station (并查集)
    HDU-4689 Derangement
    HDU 1011 Starship Troopers
    python 冒泡、快速、归并排序
    Django 上下文管理器的应用
    Django ajax小例
    Django 上传文件
    Django 登录验证码
    Django 模型中的CRUD
  • 原文地址:https://www.cnblogs.com/alphathink/p/5786834.html
Copyright © 2011-2022 走看看