JS高级**闭包**

1 篇文章 0 订阅

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

(1)全局变量:

a.优点:可重用

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

(2)局部变量

a.优点:不会被污染

b.缺点:不可重用

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

3.什么是闭包:

(1).用法:既能重用变量,又可以变量不被污染的一种编程方法

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

闭包三部曲:

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

2).外层函数用return把内层函数孩子返回到外部

3).外部想使用内层函数的人,必须先调用外层函数,才能获得return出来的内层函数对象.并将内层函数保存的一个变量中反复使用

闭包形成的原因:外层函数调用后,外层函数的作用域对象被内层函数引用着无法释放,就形成了闭包.(一句话概况)

闭包的缺点:闭包比一般的函数占用多一块内存一一外层函数的函数作用域对象.

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

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

释放了内层函数对象

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

<!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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值