js闭包理解与基本实现

简单理解:闭包就是 = 内层函数 + 外层函数的变量  

内层函数 用到了外层函数的变量 所以才会产生了闭包

<script>
    function fn(){
        let a = 1
        function f(){
            console.log(a)
}
f()
}
fn()
</script>

概念:一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域

闭包的作用:封闭数据,提供操作,外部也可以访问函数内部的变量

外部如何通过闭包去访问内部变量??? 用return即可  一下是闭包的基本形式

<script>
    function fn(){
        let num = 10
        function f(){
            console.log(num)
        }
        return f
}

//fn() === f === function f(){}
//const fun = fn() = function f(){}
const fun = fn()
fun() //调用函数


//第二种写法
    function outer(){
      const a = 10
      return function(){  //返回一个匿名函数
          return a
    }    
}
    const fun1 = outer()
    console.log(fun1()) 
</script>

注意:只要是内层函数用到了外层函数的变量 就会产生闭包  闭包 = 内层函数 + 外层函数变量 就会产生闭包

闭包的作用就是:让外部也能访问到内层的变量


闭包的应用

        1.统计函数被调用的次数

<script>
//统计函数被调用的次数
    function outer(){
        let i = 0;
        function inner(){
            i++
            console.log(`函数被调用了${i}次`)
        }
        return inner
    }
console.log(outer())
</script>

通过闭包 实现了数据私有,无法直接修改 i 的值 

闭包除非页面被关闭否则不会被垃圾回收 会产生内存泄漏的风险!!!

总结:

        1.怎样理解闭包: 

                闭包 = 内层函数 + 外层函数的变量

        2.闭包的作用:

                封闭数据,实现数据私有化,外部也可以访问函数内部的变量

                闭包很有用,因为他允许将函数与其所操作的某些数据关联起来

         3.闭包可能引起的问题

                内存泄漏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值