JSCORE-闭包

闭包: 

1. 问题: 全局变量和局部变量都有不可兼得的优缺点: 

  (1). 全局变量: 

  a. 优: 可重用

  b. 缺: 极易被污染——将来在公司中禁止使用一切形式的全局变量。

  (2). 局部变量: 

  a. 优: 不会被污染

  b. 缺: 不可重用

2. 解决: 今后,只要希望给一个函数定义一个专属的且可重用的变量,只有函数自己可用,别人不可用时,就用闭包!

3. 什么是闭包: 

  (1). 用法: 既重用变量,又保护变量不被污染的一种编程方法。

  (2). 本质: 外层函数调用后外层函数的作用域对象被内层函数引用着无法释放,就形成了闭包对象——一句话概括闭包如何形成的!

4. 如何: 3步

  (1). 用外层函数包裹要保护的变量和使用变量的内层函数

  (2). 在外层函数内部,返回内层函数对象。

  (3). 调用外层函数用变量接住返回的内层函数对象。

6. 缺点: 闭包返回的内存函数,比普通函数多占用一块内存空间。

7. 解决: 如果一个闭包不打算使用了,应该及时释放!

  保存内层函数的外部变量=null

    释放了内层函数对象

      同时也释放了外层函数的作用域对象。

8. 示例:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    //定义一个函数,帮小孩儿管理零花钱
    //1. 用外层函数包裹要保护的变量和使用变量的内层函数
    function mother(){
      var total=1000;
      //2. 在外层函数内部,返回内层函数对象。
      return function(money){
        //从总价中减去本次花的前
        total-=money;
        console.log(`花了${money},还剩${total}`);
      }
    }
    //3. 调用外层函数,用变量接住返回的内层函数对象。
    var pay=mother();
    //pay:function(money){
        //total-=money;
        //console.log(`花了${money},还剩${total}`);
    //}
    
    pay(100);//剩900

    //别人代码中:
    total=0;

    pay(100);//剩800
  </script>
</body>
</html>
运行结果: 
花了100,还剩900
花了100,还剩800

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值