闭包

100 阅读1分钟
    /* 一个函数内部其实就是一个闭包 可以理解为封闭的空间 局部空间 */
        /* 简单的闭包是指函数可以使用函数之外定义的变量 */

        /* function fn(){
            let num = 1;
        }
        alert(num) */

        /* 通过这种方式就可以拿到 函数内部的变量 这种方式就做通过闭包的方式*/
        /* function fn1(){
            let num = 1
            return function fn2(){
                alert(num)
            }
        }
        let fn = fn1();
        fn(); */

        /* 闭包可以拿到函数内部定义变量 */
        /*  function fn1(){
            let num = 1
            return function fn2(){
                return num
            }
        }
        let fn = fn1(); 
        let val = fn();
        alert(val) */

        /* 
            代码中的内部函数(f2)就是闭包
闭包就是能够读取其他函数内部变量的函数
可以把闭包简单理解成"定义在一个函数内部的函数"
是将函数内部和函数外部连接起来的一座桥梁

闭包的用途
可以读取函数内部的变量
让这些变量的值始终保持在内存中

闭包的缺点
闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露

闭包会在父函数外部,改变父函数内部变量的值
        */

        /* 闭包会在父函数外部,改变父函数内部变量的值 */
        let allFn;
        function fn(){
            let n = 0;
            allFn = function(){
                n++;
            }

            return function (){
                alert(n)
            }
        }
        let ff = fn();
        ff();
        allFn();
        ff();
        allFn();
        ff();

        
        /* 换了一种写法 */
        /* let fn = function (){
            alert('fn')
        }
        fn(); */