1、什么是闭包?
简单一句话概述就是,函数嵌套,内部函数就叫做闭包
闭包作为函数的返回值,赋值给了外部的变量,外部函数运行完成时,内部函数还没有被执行完成,所以外部函数中的变量是不会被销毁的,因此内部函数还可以使用外部函数的变量
闭包的作用:可以用来实现模块化或封装代码
2、为什么会有闭包?
- 我们在访问函数的时候,不能直接访问内部函数,所以需要在外部函数设置一个返回值,把内部函数作为返回值返回出来,这样,我们外部环境才能使用内部函数,所以才会有闭包这个概念
3、闭包内存空间未被销毁,外部函数变量还保存下来
正常一个函数执行完了,里面的变量就会被销毁。
但是闭包不是,虽然外部函数已经执行完毕。但内部函数赋值给了外部的变量,所以内部函数(这个闭包)还没有被执行完成,它还存储在内存空间,所以外部函数的内存空间不能被销毁,这个外部函数的变量还保存了下来。
4、闭包有什么用?
- 主要用来封装,将功能放到一个模块中(简称模块化)。
5、闭包代码
<script> /* 1、什么是闭包? 简单来说就是,函数嵌套,内部函数就是闭包 2、为什么要用闭包? 我们不能直接访问内部函数,所以需要在外部函数设置一个返回值, 把内部函数作为返回值返回出来,这样,我们外部环境才能用内部函数 3、闭包的内存空间未被销毁 正常一个函数执行完了,里面的变量就会被销毁。 但是闭包不是,虽然外部函数已经执行完毕,但内部函数赋值给了外部的变量, 所以内部函数(这个闭包)还没有被执行完,它还存储在内存空间, 所以外部函数的内存空间不能被销毁,这个外部函数的变量还保存了下来。 所以才可以输出num值 */ function outerFun() { let num = 10; function innerFun() { console.log(num); } return innerFun; } // 全局环境下拿到内部函数,相等于fun:innerFun let fun = outerFun(); // 直接调用内部函数 fun(); </script>