前言

闭包函数是JavaScript很重要的一个概念,作为一个有过开发经验的前端工程师,绝对不可能没用过闭包。但是令人感到不幸的是,并不是每个人都能很好的表达闭包。如果你也是这样的情况,那么这篇博客很适合你

基础

要想了解什么是闭包,首先得学一些基础知识

作用域链

一般情况下,变量取值到创建这个变量的函数的作用域中取值。

但是如果在当前作用域中没有查到值,就会向上级作用域去查,直到查到全局作用域,这么一个查找过程形成的链条就叫做作用域链。

JS 垃圾回收机制

JavaScript 引擎中有一个后台进程称为垃圾回收器,它监视所有对象,并删除那些 不可访问 的对象。

进阶

知道什么是作用域链和JS的垃圾回收机制,我们就可以来学习闭包了。

什么是闭包

闭包函数就是可以访问到上级作用域内变量的内部函数。

接下来这两个问题面试官经常会问。

为什么闭包函数能够让局部变量的值始终保持在内存中?

因为JS的垃圾回收机制只会回收不可访问的对象。

而闭包函数只要还被引用,绑定在作用域链上的对象就会因为闭包的关系不会被当做垃圾回收。

这也就是闭包能够让局部变量的值始终保持在内存中的原因。

闭包函数什么时候释放内存