JavaScript闭包的详解(附例题讲解)

什么是闭包?

  1. 密闭的容器,类似于set、map容器,用于存储数据

  2. 闭包是一个对象,存放数据的格式为: key :value

形成的条件

  1. 函数的嵌套
  2. 内部函数调用外部函数的局部变量

闭包的优点

  • 延长外部函数局部变量的的声明周期

闭包的缺点

  1. 容易造成内存泄漏

注意点

  1. 合理使用闭包
  2. 使用完闭包及时清除(销毁)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>闭包</title>
</head>
<body>
    <script>
       function fun(n,o){
           console.log(o);
           return {
               fun:function(m){
                   return fun(m,n);
               }
           }
       }

       var a = fun(0);
       a.fun(1);
       a.fun(2);
       a.fun(3);
       
    /* 
       var a = fun(0);
       o未定义输出undefined

       a.fun(1);
       a.fun(1) => fun(1,0) 输出 0

       a.fun(2);
       a.fun(2) => fun(2,0) 输出 0

       a.fun(3);
       a.fun(3) => fun(3,0) 输出 0
    */
       var b = fun(0).fun(1).fun(2).fun(3)
    /* 
        var b = fun(0).fun(1).fun(2).fun(3)
        第一次调用fun(0),参数o未定义输出undefined

        fun(0).fun(1) => var a = fun(0) a.fun(1) 输出 0

        fun(0).fun(1).fun(2) => var a = fun(1,0) a.fun(2) 输出 1
         fun(0).fun(1).fun(2).fun(3) => var a = fun(2,1) a.fun(3) 输出 2

    */
       
       var c = fun(0).fun(1)
       c.fun(2)
       c.fun(3)
    /* 
       var c = fun(0).fun(1)
       fun(0).fun(1) => var a = fun(0) a.fun(1) 输出 0

       c.fun(2)
       c.fun(2) =>fun(2,1) 输出 1

       c.fun(3)
       c.fun(3) =>fun(3,1) 输出 1
    */   
    </script>
</body>
</html>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值