js中的闭包


一、概念

1.闭包的含义

简单了解一下什么是闭包?
闭包:有权访问另一个函数作用域中的变量的函数
引用别人的一句话
理解闭包的关键在于:外部函数调用之后其变量对象本应该被销毁,但闭包的存在使我们仍然可以访问外部函数的变量对象,这就是闭包的重要概念。

2.闭包的组成

闭包由函数和创建该函数的环境组成的
这个环境由闭包创建时在作用域中的任何局部变量组成的。

3.生成闭包的条件

  • 函数嵌套函数
  • 内部函数引用了外部函数中的数据(属性、函数)
  • 参数和变量不会被回收

二、特点

1.优点

  • 能够读取函数内部的变量
  • 让这些变量一直存在于内存中,不会在调用结束后,被垃圾回收机制回收

2.缺点

  • 函数执行完后,函数内的局部变量没有释放,占用内存时间变长,容易造成内存泄漏
    解决方案:退出函数之前,将不使用的局部变量删除。
  • 如果不是因为某些特殊任务而需要闭包,在没有必要的情况下,在其它函数中创建函数是不明智的,因为闭包对脚本性能具有负面影响,包括处理速度和内存消耗。

三、案例

案例1

function test(){
  var sum=100;
  function a(){
    sum++;
    console.log(sum);
  }
  function b(){
    sum--;
    console.log(sum);
  }
  return [a,b];
}
var arr=test();
arr[0]();//101
arr[0]();//102
arr[1]();//103

内部函数被返回到外部时产生闭包,当父函数执行完毕后并不会销毁函数内的局部变量。

案例2

  <script>
     function test(){
            var arr = [];
            for(var i =0; i<10;i++){
                (function(j){
                  arr[j]=function(){
                    document.write(j);
                  }
                }(i))//立即执行函数,每次定义都立即执行
            }
            return arr;
        }
        var myarr =test();
        for(var j=0;j<10;j++){
            myarr[j]();
        }
  </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值