闭包

作者: 开心的小哈 | 来源:发表于2018-12-25 11:09 被阅读0次

概念

当内部函数被保存到外部时,将会生成闭包.闭包会导致原有的作用域链不释放造成内存泄漏.
什么是泄露比如手中的撒子,会慢慢的溜出去,剩余的越少,少的就是内存,溜出去的就是占用

闭包的作用

实现公有的变量
eg:函数累加器:

function add(){
            var cont=0;
            function dd(){
                cont++;
                document.write(cont);
            }
            return dd;
        }
        var demo=add();
        demo();
        demo();
        demo();
        demo();

可以做缓存(存储结构)

function test(){
            var num=100;
            function a(){
                num++;
                document.write(num);
            }
                
            function b(){
                num --;
                document.write(num);
            }
            return [a,b];
        }
        var myArr=test();
        myArr[0]();
        myArr[1]();
function eater(){
            var food="";
            var obj={
                eat:function (){
                    document.write("i am eating" + food);
                    food = "";
                },
                push: function (myFood){
                    food =myFood;
                }
            }
            return obj;
        }
        var eater1=eater();
        eater1.push("banana");
        eater1.eat();

闭包:运行结果10个10;10个函数访问的是同一个i

function test(){
            var arr=[];
            for (var i = 0; i < 10; i++) {
                arr[i]=function (){
                    document.write(i+" ");
                };
                
            }
            return arr;
        }
        var mArr=test();
        for (var i = 0; i < 10; i++) {
            mArr[i]();
        }

避免闭包加上立即执行函数,一个立即执行函数对应着它里面的函数
十个立即执行函数十个j然后里面的函数执行

function test(){
            var arr=[];
            for (var i = 0; i < 10; i++) {
                //要加上立即执行函数
                (function (j){
                arr[j]=function (){
                    document.write(j+" ");
                };
                }(i));
                
            }
            return arr;
        }
        var mArr=test();
        for (var i = 0; i < 10; i++) {
            mArr[i]();
        }




    //比如
            (function (j){
             arr[i]=function (){
                 document.write(" "+j);
             }
             }(0));
             
             (function (j){
             arr[i]=function (){
                document.write(" "+j);
             }
             }(1));
             
            }

可以实现封装,属性私有化

 var name="小明";
             
             function ko (age){
                 var name="小白"
                 this.age=age;
                 function hh(){
                     console.log(name)
                 }
                 return hh();
             };
             var zm=new ko(19);

模块化开发,防止污染全局变量

var name="小明";
             
             var ko=function (){
                 var name="小白"
                 function hh(){
                     console.log(name)
                 }
                 return hh();
             }();

相关文章

  • swift-闭包

    闭包 闭包定义 闭包简化 - 尾随闭包 闭包参数 闭包返回值 闭包的循环引用

  • 闭包,闭包,闭包

    1、这家伙到底是什么? 网上关于这个的讨论的太多了太多了,有各种的举例子,但是大部分还在寻找这个答案的小伙伴对于变...

  • 闭包-Closures [swift 5.1]

    闭包的语法 尾随闭包 闭包逃离 自动闭包

  • Day7 闭包(Closures)

    本页包含内容:• 闭包表达式• 尾随闭包• 值捕获• 闭包是引用类型• 逃逸闭包• 自动闭包 1、闭包表达式 闭包...

  • Python闭包

    闭包 = 环境变量 + 函数 调用闭包内部的环境变量 闭包的经典误区 闭包与非闭包实现人类走路 非闭包 闭包

  • 闭包(closure)

    ● 闭包基础 ● 闭包作用 ● 闭包经典例子 ● 闭包应用 ● 闭包缺点 ● 参考资料 1、闭包基础 作用域和作...

  • swift- 闭包一

    /*• 闭包表达式• 尾随闭包• 值捕获• 闭包是引用类型• 逃逸闭包• 自动闭包*/

  • (9) python之闭包

    闭包闭包 = 函数 + 环境变量(函数定义的时候) 一个最简单的闭包 闭包不受外部变量影响 非闭包 闭包 闭包 只...

  • Swift-进阶 :闭包(二)逃逸闭包 & 非逃逸闭包

    本文主要分析逃逸闭包 、非逃逸闭包、自动闭包 逃逸闭包 & 非逃逸闭包 逃逸闭包定义 当闭包作为一个实际参数传递给...

  • javascript闭包详解

    跟我念 bi 闭 bao包 ,闭包的闭,闭包的包。。 闭包的简介 在计算机科学中,闭包(英语:Closure),又...

网友评论

      本文标题:闭包

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