闭包是什么? 反正我理解了

本文深入浅出地介绍了JavaScript中的闭包概念,通过实例解析闭包的产生、特点及作用。闭包允许内部函数访问外部变量,实现变量持久化,常用于模块化封装。示例中展示了如何利用闭包将代码封装为模块,减少全局变量,提高代码可读性和维护性。同时,文章探讨了闭包在内存管理和函数作用域链中的角色,帮助读者更好地掌握这一核心概念。
摘要由CSDN通过智能技术生成

想要好好的理解闭包,你得首先理解作用域。别说了,赶紧去看作用域吧,?,这世界就是如此残酷。好,言归正传,我们是来学习闭包的。O(∩_∩)O

简单点 这就是闭包

//   闭包;函数前天函数;内部函数就是闭包
        function outerfn() {
            function interfn() { }  //这就是闭包函数
        }

菜来了!?

闭包只要记住:

  • 闭包产生是:函数内嵌套函数;
  • 闭包函数在外面被调用,访问;
  • 闭包可以访问外部的变量,但是外部的变量不能访问内部;
  • 闭包可以保持对定义时的作用域的引用,使之不被销毁,长生不老。
 //  闭包函数能不能用外部定义的变量?
        // 涉及到作用域链 函数内部使用变量,如果函数内部有就使用,没有就回去上一层去找,一直找到全局环境下
        //简单理解就是一层一层套下来,使用变量的时候一层一层往外找
        function outerfn() {
            let a = 10
            function interfn() {
                console.log(a);
            }
            // 如果使用outerfn需要把闭包return出去,当时用outerfn得时候其实是把interfn赋值给了outerfn
            return interfn
        }
        let fn = outerfn()
        fn()

 输出的肯定是10

那么就有的同学问了 为什么是10呢?

麻烦你看一下上面好吗?

 正常情况下 函数执行完成,内部变量会被销毁,那么有的同学就问了 为啥要销毁呢 ? 你是十万个为什么吗? 问就是 释放内存空间

在函数外面是不能调用函数内部的a, 当执行这个函数的时候可以调用的,函数执行完就被释放了 没了懂吗 a没了  

闭包函数为什么不会销毁:内部函数没有执行完成,当调用外部函数时,内部函数return 给了外部函数,还能被调用,能被调用,外部变量不会被销毁 ,也是闭包的一个特性

 闭包的应用

闭包可以干什么呢 ?    可以封装一段代码 实现模块化

先看下面这段代码

 let a = 10
        let b = 20
        function add() {
            return a + b
        }
        function acc() {
            return a - b
        }
        let result1 = add()
        let result2 = acc()
        console.log(result1);
        console.log(result2);

有什么问题呢?

我们定义了 两个全局变量和全局函数 这么多代码看着一点都不爽

封装之后

let yy = (function () {
            let a = 10
            let b = 20
            function add() {
                return a + b
            }
            function acc() {
                return a - b
            }
//return出去 yy就有了这两个方法了 
            return{
                add,
                acc
            }
        })()


        let result1 = yy.add()
        let result2 = yy.acc()
        console.log(result1);
        console.log(result2);

封装起来 调用时 我只用了yy这一个变量实现了 两个功能

简单方便

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值