- 要了解闭包,首先要知道什么是 词法作用域
百度百科官方解释是:定义在词法阶段的作用域,是由写代码时将变量和块作用域写在哪里来决定的。词法作用域_百度百科 (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站视频的学习