javascript:闭包

  • 作用域

    JS不支持{}块级作用域,只有函数能形成作用域

    但是JS可以用let代替var创建变量模拟块级作用域

    if(1){
    	let a = 1;
    }
    console.log(a);
    
  • 闭包

    形成条件:嵌套函数,内部函数访问外部变量

    在函数内形成作用域,声明的变量不可被外部访问,而内部创建函数可以访问,再把函数返回出去,利用闭包避免变量全局污染

    function outer(){
        var a = 1;
        function inner(){
            a++;
            console.log(a);
        }
        return inner;
    }
    var count = outer();
    count();
    console.log(a); //会报错 保护了a变量
    
    • 垃圾回收

    闭包会出现一个问题,网页不刷新退出,如上例,inner函数和a变量会一直占用内存。

    JS有个垃圾回收机制,如果有对象或者变量获取不到了,机制会自动回收释放,如上例,如果要释放内存需要调用count = null;

posted @ 2021-03-11 13:21  镜像山海  阅读(44)  评论(0)    收藏  举报