变量作用域
在我们以往学习的过程中 学习过变量根据作用域的不同分为两种 全局变量和局部变量
在我们说闭包之前 我们首先要理解
函数内部可以使用全局变量
函数外部不可以使用局部变量
在函数执行完毕时 本作用域内的变量会被销毁
闭包是什么
在《JavaScript高级程序设计》 一书中
是这么解释的:
闭包值有权访问另一个函数作用域中变量的函数
可以简单理解为 一个作用域可以访问另外一个函数内部的局部变量
如下面代码
function fn() {
let x =10;
function fun(){
console.log(x);
}
fun();
}
fn();
我们 fun 这个函数作用域 访问了另外一个函数 fn 里面的局部变量 num
我的理解
我个人是这么理解的 闭包没有那么复杂
本质上就是上级作用域内的变量被下级作用域借用
从而使上级作用域内变量的声明周期没有被释放
要等到下级作用域执行完毕之后才可以正常得到释放
闭包的作用
闭包的主要作用就是延申了变量的作用范围
闭包同时也常常用来间接访问一个变量 或者说是 隐藏一个变量
闭包是一种保护私有变量的机制,在函数执行时形成私有的作用域,保护里面的私有变量不受外界干扰。 直观的说就是形成一个不销毁的栈环境, 闭包实现了传递值和功能的调用