闭包的特性(只做了粗略整理)

一、概念

闭包是有权访问另一个函数作用域中变量的函数

自己的理解:它主要是利用windows才是匿名函数功能执行的环境的特性,通过在函数体内创建匿名函数,然后返回函数的方式,将原本本应该在函数体内执行完就销毁的变量保存了下来,这些被保存下来的变量,会一直存在,直到闭包不存在为止,当然也可以通过闭包名=null来释放掉闭包

二、闭包的特性

闭包只能取得包含函数中的任何变量的最后一个值

function arrFunc(){
     var arr=[];
     for(var i = 0;i<10;i++){
         arr[i] = function(){
            return i;
         };
    }
    return arr;   //输出10个10,原因是:arrFunc执行完后,其作用域被销毁,但它的变量对象仍保存在内存中,可以被匿名函数访问到
}        

修改:

function arrFunc(){
     var arr=[];
     for(let i = 0;i<10;i++){  //let是块级作用域,i为0时,执行完毕就销毁了
         arr[i] = function(){
            return i;
         };
    }
    return arr;   
}

3、闭包会造成的问题

内存常驻、内存泄漏

4、闭包的应用:

设置私有变量

5、实现add(1)(2)(3)

function sum(a){
        return function(b){
              return function(c){
                    return a+b+c;
              }
        }
}

 

posted @ 2019-10-12 10:26  热爱前端的韩梅梅  阅读(522)  评论(0编辑  收藏  举报