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

js的闭包

闭包是有权限访问其他函数作用域的局部变量的一个函数 

代码

function outer(){const a=1;function f(){console.log(a)}f()}outer()

简单来说:闭包=内层函数+引用的外层函数变量

为什么要使用闭包? 

用此方法可以来统计函数调用次数, 但是如果i这个变量被修改了则会影响到这个统计结果

let i=0;function fn(){i++;console.log(`函数被调用了${i}次`)}

 最好的方法就是把变量变成函数的私有变量,防止外部修改

function count(){let i=0;function fn(){i++;console.log(`函数被调用了${i}次`)}return fn;}const fun=count()

闭包一定有return吗?

 答:不一定,外部如果想要使用闭包的变量,此时则需要return

function outer(){const a=1;return function f(){console.log(a)}f()}const fn=outer();fn()

闭包一定会引起内存泄漏吗?

答:闭包可能引起内存泄漏,如下代码所示,i可能引起内存泄漏

 function count(){let i=0;function fn(){i++;console.log(`函数被调用了${i}次`)}return fn;}const fun=count()fun()fun()

1.fun是一个全局变量,代码执行完毕不会立即销毁

2.fun使用count函数

3.count函数使用fn函数

4.fun函数里面用到count

5.count被引用就不会被回收,所以一直存在

此时:闭包引起了内存泄漏

注意:

1. 不是所有内存泄漏都要手动回收

2. 比如react里面很多闭包不能回收的

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

相关文章:

  • ubuntu20.04 直接安装vpp23.06 测试双 VPP Tunnel Ike2
  • mysql sql 执行流程
  • go-kafka
  • 如何在windows电脑上安装多个node,并可以进行随意切换
  • 《机器学习核心技术》分类算法 - 决策树
  • aws PinPoint发附件demo
  • 边写代码边学习之Bidirectional LSTM
  • Django学习笔记-实现联机对战
  • nacos总结1
  • Web安全测试(三):SQL注入漏洞
  • Webstorm 入门级玩转uni-app 项目-微信小程序+移动端项目方案
  • 从零开始的Hadoop学习(三)| 集群分发脚本xsync
  • golang http transport源码分析
  • spring boot 项目整合 websocket
  • 统计学补充概念-17-线性决策边界
  • 指针变量、指针常量与常量指针的区别
  • mq与mqtt的关系
  • 代码大全阅读随笔 (二)
  • vue 项目的屏幕自适应方案
  • 23软件测试高频率面试题汇总
  • PHP8的匿名函数-PHP8知识详解
  • Redis—Redis介绍(是什么/为什么快/为什么做MySQL缓存等)
  • C语言链表梳理-2
  • 【深度学习】实验03 特征处理
  • 基于Dpabi的功能连接
  • 在React项目是如何捕获错误的?
  • 基于内存池的 简单高效的数据库 SDK简介
  • python实例方法,类方法和静态方法区别
  • Pyecharts教程(四):使用pyecharts绘制3D折线图
  • 【stable-diffusion使用扩展+插件和模型资源(下)】