美文网首页JS
函数的闭包

函数的闭包

作者: 小飞侠zzr | 来源:发表于2017-10-10 20:20 被阅读0次

    闭包 函数内部的函数会形成闭包
    闭包里面使用局部变量和函数参数的时候,用的就是外部函数的局部变量。
    弊端:闭包会导致函数运行结束之后局部变量的空间不会被释放,从而造成内存泄漏,(执行的次数越多,占用的内存越多)

    变量的作用域,局部变量,是在函数内部声明的,局部变量不可以在函数外面使用
    本质原因:函数在被调用的时候会入栈,并且分配空间,函数内部的变量都是在这块空间声明的,当函数
    运行完毕之后就会出栈,系统回收空间,函数颞部的变量空间也会被回收,所以不能再函数外面使用函数内部定义的变量。

    内存泄漏

    函数内部的函数可以形成闭包。

    function fn(){
    var a = 10;
    function in1(){
    console.log(++a);
    }
    function in2(){
    console.log(++a);
    }
    return [in1, in2];
    }
    var arr = fn();
    var f1 = arr[0];
    var f2 = arr[1];
    f1();
    f1();
    f1();
    f1();
    f1();
    f2();

    打印结果

    11
    12
    13
    14
    15
    16

    闭包的应用场景

    利用闭包可以保存局部变量

    for(var i = 0;i<divS.length;i++){
    (function(){
    var a=i;
    divS[i].onclick=function(){
    setTimeout(function(){
    console.log(a+1);
    },1000);
    }
    })();
    }

    传参 利用闭包可以保存参数

    for(var i = 0;i<divS.length;i++){
    (function(a){
    divS[i].onclick=function(){
    setTimeout(function(){
    console.log(a+1);
    },1000);
    }
    })(i);
    }

    相关文章

      网友评论

        本文标题:函数的闭包

        本文链接:https://www.haomeiwen.com/subject/clpbyxtx.html