闭包问题一次搞定

上链接:前端面试被问闭包,你们讲清楚了吗?_哔哩哔哩_bilibili

MDN链接(看完就真的懂了):闭包 - JavaScript | MDN (mozilla.org)

1. 讲概念 - 什么是闭包?

MDN:能够访问函数作用域之外变量的函数

红宝书:有权访问另一个函数变量的内部函数

我的理解:函数内部返回一个函数,这个函数可以将内部作用域和外部作用域连接起来,使得函数能够访问外部作用域的变量,并且这些变量会一直存在于内存中;

2. 说用途 - 为什么要用闭包?

闭包最重要的特性就是 私有化数据 - 在私有化数据的基础上保持数据;

js模块化封装 - 自执行函数,工厂函数 (不污染全局变量,私有变量不被外部直接访问)

节流防抖函数,使用闭包就是为了保存上一次的定时器信息;

函数柯里化;

3. 优缺点 - 闭包有什么缺点?

1. 最经典的在循环中创建闭包, 所有闭包共享同一个词法作用域

2. 使用闭包如果不及时的将这些变量置空,可能会导致内存占用过多;

拓展:什么样的情况下会导致内存泄漏?

拓展:垃圾回收机制 - 标记清除算法,引用计数算法,新生代老生代;

如何消除这些缺点?

使用更多的闭包

let创建局部变量

4. 应用场景 - 闭包有哪些应用?

节流防抖;函数柯里化;高阶函数,vue的响应式原理;react hooks原理

拓展:react数据双向绑定过程;

react hook 如何优雅的利用闭包

reacthooks与闭包(分析了hooks源码中闭包的应用,深入浅出,没事多看看)

reacthook与闭包陷阱(分析了hook与链表,闭包陷阱)

防抖函数:

(事件响应函数在执行一段时间后才开始执行,可以传入参数使得首次执行)

防抖函数的封装要点:1:首次要立即执行;2:类型检查;3:this指向和event指向

实现一个防抖函数

节流函数:

(事件响应函数在一定时间内只执行一次,会按照一定的频率执行)

节流函数要点:1:是否首次执行;2:是否执行最后一次;3:

JS模块化封装

你可能感兴趣的:(js基础,javascript)