一、什么是闭包?
闭包
这词看起来虽高大上,但理解起来却跟纸老虎一样,非常容易理解,
闭包
指的是一组函数带有引用关系的,换句话说,函数内部访问外部的函数变量或属性就会构成闭包
。
所以,闭包
在 JS 中无处不在。
二、为什么要闭包?
原因很简单,里面的函数引用了外部函数的变量或属性时,需要将它存进内存中,让我们这些 API 仔获取到。
三、闭包的使用
阿这~好像不用我举例了吧?因为这玩意无处不在啊!咳咳 ~ 我还是举例下吧:
const father = () => {
const name = 'Jack'
return {
son() {
return {
name: 'Tony',
fatherName: name // son 函数引用了外部的变量,于是整个 father 函数就构成了一个“包子”。
}
}
}
}
const Jack = father();
console.log(Jack.son().fatherName) // 打印: Jack
四、作用域是闭包的前提
作用域
看起来也是一个抽象的词,但也是一只纸老虎,把它想象成俄罗斯套娃,或者干脆点,我们常见的左侧菜单栏总认识吧,没错,作用域描述的就是这么一个关系,比如对象的嵌套:
{ // 顶层1
{ // 内层1-1
{ // 内层1-1-1
}
}
}
现在来回顾上面的函数结构,是不是也符合这种嵌套关系呢?这就是作用域的基本概念。
完!