JS 闭包的核心机制是什么?


函数在创建时,会绑定它所在的词法作用域。如果这个函数引用了外部函数作用域中的变量,即使外部函数已经执行结束,这些变量也会被保留下来,这就是闭包。

闭包的形成通常在一个函数内部定义了另一个函数,并将这个内部函数作为 return 返回。这个内部函数,就携带了对外部作用域的引用。它会带来以下几个应用场景。

  • 私有变量的封装:创建一个模块,但是只通过暴露特定函数接口来操作内部的资源状态。来做到模块化实现。
  • React Hooks 的底层基石useState 通过闭包特性,在多次渲染之间,保存数据状态。

但是闭包持有外部引用,不会被垃圾回收只能在不再需要时,手动接触引用。比如在组件卸载时,清除定时器,或者将不再外部使用的变量设置为 null,从而打破引用