函数的闭包

135 阅读1分钟

- 要了解闭包,首先要知道什么是 词法作用域

百度百科官方解释是:定义在词法阶段的作用域,是由写代码时将变量和块作用域写在哪里来决定的。词法作用域_百度百科 (baidu.com)

一般来说官方的解释都比较难懂,此处用一小段代码来说明

   function Fn(){
   let val = 0;
   return () => {return val++;};
   }
   

val变量 在 {return val++;} 函数体外声明,

此时 val 和{return val++;} 就不在同一个作用域下了

就说它们处于不同的 词法作用域

- 什么是闭包

以我的理解就是

当一个函数执行的位置和它语法作用域不在同一个作用域时,就形成了闭包

function Fn(){
let val = 0;
return () => {return val++;};
}
let add = addFn();
console.log(add());

对于这段代码就是

() => {return val++;} 函数在全局作用域下调用(执行)

但是,其声明(语法作用域)却封装在一个匿名函数内,而不是在全局作用域下

因此它们处于不同的作用域,就形成了闭包

- 闭包的作用

1、变量长期驻扎在内存当中

2、避免全局变量污染

以上知识点来自于b站视频的学习

闭包的理解_哔哩哔哩_bilibili