简单理解:闭包就是 = 内层函数 + 外层函数的变量

内层函数 用到了外层函数的变量 所以才会产生了闭包

<script>function fn(){let a = 1function f(){console.log(a)
}
f()
}
fn()
</script>

概念:一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域

闭包的作用:封闭数据,提供操作,外部也可以访问函数内部的变量

外部如何通过闭包去访问内部变量??? 用return即可  一下是闭包的基本形式

<script>function fn(){let num = 10function f(){console.log(num)}return f
}//fn() === f === function f(){}
//const fun = fn() = function f(){}
const fun = fn()
fun() //调用函数//第二种写法function outer(){const a = 10return function(){  //返回一个匿名函数return a}
}const fun1 = outer()console.log(fun1())
</script>

注意:只要是内层函数用到了外层函数的变量 就会产生闭包  闭包 = 内层函数 + 外层函数变量 就会产生闭包

闭包的作用就是:让外部也能访问到内层的变量


闭包的应用

1.统计函数被调用的次数

<script>
//统计函数被调用的次数function outer(){let i = 0;function inner(){i++console.log(`函数被调用了${i}次`)}return inner}
console.log(outer())
</script>

通过闭包 实现了数据私有,无法直接修改 i 的值

闭包除非页面被关闭否则不会被垃圾回收 会产生内存泄漏的风险!!!

总结:

1.怎样理解闭包:

闭包 = 内层函数 + 外层函数的变量

2.闭包的作用:

封闭数据,实现数据私有化,外部也可以访问函数内部的变量

闭包很有用,因为他允许将函数与其所操作的某些数据关联起来

3.闭包可能引起的问题

内存泄漏

js闭包理解与基本实现相关推荐

  1. JS闭包的理解及常见应用场景

    JS闭包的理解及常见应用场景 一.总结 一句话总结: 闭包是指有权访问另一个函数作用域中的变量的函数 1.如何从外部读取函数内部的变量,为什么? 闭包:f2可以读取f1中的变量,只要把f2作为返回值, ...

  2. 简单理解js闭包、类型引用....第一章

    js 闭包函数.类型引用.this指向.对象原型链...这些东西让我们对js又爱又恨!js虐我千百遍,我待js如初恋. 很多初学者一开始会觉得这些概念没什么用,导致对这些东西产生一种抵抗力.接下来我们 ...

  3. 面试官:谈谈对JS闭包的理解及常见应用场景(闭包的作用)

    文章目录 对JS闭包的理解及常见应用场景(闭包的作用) 1.变量作用域 2.如何从外部读取函数内部的变量? 3.闭包概念 4.闭包用途 5.闭包的理解 6.闭包应用场景 setTimeout传参 回调 ...

  4. js闭包的理解及应用场景

    函数的声明与执行 函数定义阶段 1.会在堆内存中开辟一个存储空间 把函数体放在这个空间里 函数中的所有变量不解析 2.把这个空间地址赋值给函数名 然后储存在栈内存中 函数调用阶段 1.根据函数名找到对 ...

  5. 深入理解JS闭包(一看就会)

    前言 JS闭包,对于每一个前端而言都是一个绕不开的概念.本人学习之初,因为闭包这个概念而花费了大量的时间以及精力去理解这个概念.所以在这里,我打算写一篇文章来分享一下本人的学习心得以及我眼中的闭包. ...

  6. js闭包的理解和作用

    一.为什么引入闭包 JS为每个变量对象定了作用域,在ES5 中只有全局作用域和函数作用域,没有块级作用域,由内向外形成作用域链,函数外部不能访问函数内部作用域的局部变量.在实际开发中会带来很多不便. ...

  7. 详解之-js闭包的用途

    js闭包可以用在许多地方.它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中.具体怎么理解呢,各位看官请仔细看好下文 我们来看看闭包的用途.事实上,通 ...

  8. 简单说 一道JS闭包面试题

    说明 最近看到这样一段代码 function fun(n,o){console.log(o);return {fun:function(m){return fun(m,n);}};}var a = f ...

  9. 【Javascript】Js闭包

    1.什么是闭包? 官方解释:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 相信很多朋友对这种解释非常反感,因为看完以后根本不知道它想表达什 ...

最新文章

  1. 春运渡劫!Python给我抢回家的火车票
  2. leetcode 236. 二叉树的最近公共祖先 递归解法 c语言
  3. Python re 模块findall() 函数返回值展现方式详解
  4. Xshell分屏显示
  5. C++自定义直方图统计
  6. MFC的GDI绘制坐标问题
  7. 深入Atlas系列:Web Sevices Access in Atlas示例(4) - 使用HTTP GET调用Web Services方法...
  8. 作者:李涛,男,南京邮电大学计算机学院、软件学院院长,南京邮电大学大数据研究院院长。...
  9. java 地址传递 返回值_Java中的值传递和引用传递
  10. 江苏新一代物联网全省商用 全省信号覆盖率达97.5%
  11. Python基础之完数输出
  12. 免费遥感图像数据共享网汇总
  13. 2021-10-21python中spilt函数的学习
  14. TesterHome android app 编写历程(六)
  15. 2017全国计算机高校排名,全国计算机专业大学排名_2017计算机专业大学排名
  16. 如何使用python下载B站视频
  17. python 视频转场_OpenGL 实现视频编辑中的转场效果
  18. android 的Zygote 分析
  19. 复旦计算机系吴昊,数学科学学院候选好导师访谈——吴昊老师
  20. Java之XML解析-使用dom(org.w3c.dom)解析XML

热门文章

  1. 从 Preact 源码一窥 React 原理(二):Diff 算法
  2. 计算机高配置表格,过万的笔记本电脑高配置清单列表
  3. Tomcat常见面试题你都知道答案吗?
  4. 信产部首次明确表态:国内手机漫游费将降低
  5. [android] 手机卫士黑名单功能(ListView优化)
  6. Java锁-Synchronized深层剖析
  7. SSL证书之https和http的区别
  8. DSP篇--C6678功能调试系列之EMIF、GPIO调试
  9. EMIF接口时序和参考代码
  10. setfacl 权限导出_getfacl命令查看文件访问控制列表信息setfacl命令设置文件访问控制列表...