当前位置: 首页 > news >正文

前端八股文之“闭包”

一、定义

一句话概括闭包:能够访问函数内部变量的函数与这个变量的组合构成了闭包结构。如下代码

 function fuc1(){let num = 999return function fuc2(){console.log(num)}}fuc1()();

如代码所示,fuc2和父级变量num构成了一个闭包环境。

二、原理

子函数引用了父函数中的变量,导致父函数中的变量不能被垃圾回收机制清除。

三、应用场景

1、变量私有化,防止变量被污染。

var Counter = (function () {var privateCounter = 0;function changeBy(val) {privateCounter += val;}return {increment: function () {changeBy(1);},decrement: function () {changeBy(-1);},value: function () {return privateCounter;},};
})();console.log(Counter.value()); /* logs 0 */
Counter.increment();
Counter.increment();
console.log(Counter.value()); /* logs 2 */
Counter.decrement();
console.log(Counter.value()); /* logs 1 */

2、函数防抖

        let inp = document.querySelector("input")function fun() {console.log(this.value)}inp.oninput = debounce(fun, 3000)function debounce(fun,delay) {let t = nullconsole.log('闭包父级变量T---->',t)return function () {console.log(t,"----每次触发input事件,t的值")if (t) {console.log(t,"清除定时器的值")clearTimeout(t) //每一次触发事件都要先清除定时器然后再重新设置定时器}t = setTimeout(() => {fun.call(this)console.log(t,"setTimeout内")}, delay);}}

四、缺点

父级函数的变量会永久存放在内存中,除非手动清除,否则容易造成内存泄露。

http://www.lryc.cn/news/167033.html

相关文章:

  • 数据可视化:掌握数据领域的万金油技能
  • Apache Kafka 基于 S3 的数据导出、导入、备份、还原、迁移方案
  • 事务管理AOP
  • Java从Tif中抽取最大的那张图进行裁剪成x*y份
  • 人工智能AI界的龙头企业,炸裂的“英伟达”时代能走多远
  • 【实战】H5 页面同时适配 PC 移动端 —— 旋转横屏
  • 使用凌鲨进行聚合搜索
  • 程序设计之——手把手教你如何从Excel文件中读取学生信息
  • Docker容器化技术(从零学会Docker)
  • 【新版】系统架构设计师 - 案例分析 - 总览
  • 【Git】02-Git常见应用
  • YOLO物体检测-系列教程2:YOLOV2整体解读
  • u盘传输数据的时候拔出会怎么样?小心这些危害
  • 【踩坑纪实】URL 特殊字符 400 异常
  • Contents:帮助公司为营销目的创建内容
  • 1397: 图的遍历——广度优先搜索
  • Java 华为真题-选修课
  • Invalid access token: Invalid header string: ‘utf-8‘ codec can‘t decode byte
  • Java 中将多个 PDF 文件合并为一个 PDF
  • python经典百题之水仙花数
  • jvm的调优工具
  • C语言--字符串旋转笔试题
  • IntelliJ IDEA使用_常规设置
  • ResponseBodyAdvice 获取参数
  • 人力资源服务升级正当时,法大大助力佩信集团加速数字化
  • UG\NX二次开发 二维向量相加
  • RabbitMQ深入 —— 持久化和发布确认
  • 人脸识别三部曲
  • 【Linux网络编程】Socket-TCP实例
  • <OpenCV> 边缘填充