js中的闭包

闭包是一种语法特性,指在一个函数中访问了外部的自由变量

{
  let count = 0;
  const add = ()=> {
    count += 1  //访问了该作用域外部的自由变量count
  }
}
{
  let money = 100;
  window.getMoney= function (){ return money;}
  window.use = () => { money -= 1}
  window.earn = () => { money +=1 }
}

通过访问getMoney能间接获取money的值,调用use和earn会更新money的值,我们在作用域以外
无法直接访问money这个变量

闭包的应用:

const add2 = function (){
  let total = 0
  return function add(){
    total+=1  //访问了外部作用域的total
}
  
add2() // 相当于调用了add(),执行了total+=1

解决的问题:

  1. 避免污染全局的环境
  2. 提供对变量的间接访问
  3. 维持变量,避免被垃圾回收

缺点:

使用不当会造成“内存泄漏”

function example(){
  var x = {name:'x'}
  var y = {name:'y',description:'----- 1000多个字符-----'}
  return function fn(){
    return x;
  }
}
const myFn = example()
const myX = myFn() // 对于正常浏览器 y会在一段时间后消失

在example中 x被使用,但 y并没有被使用。在旧版IE中,只要某个函数中的某个变量被使用,那么该函数中的其它未被使用的变量也不会被垃圾回收。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 「每日一题」JS 中的闭包是什么? 方应杭[https://www.zhihu.com/people/zhihus...
    7b7d23d16ab5阅读 1,279评论 0 0
  • 在上一篇文章“执行环境和作用域”中,我试着梳理了执行环境和作用域的关系。但实际上,文章中并没有提到作用域,而是介绍...
    海痕阅读 1,706评论 0 0
  • 一、首先简述什么是闭包 为什么会有闭包这个概念,我们知道函数内部可以直接读取全局变量,但是函数外部无法读取函数内部...
    周花花啊阅读 2,361评论 0 0
  • 什么是闭包 为了便于理解我在代码中使用了中文: 在上面的代码中,在一个立即执行函数中有一个局部变量a,有一个函数f...
    是刘快啊阅读 3,511评论 0 1
  • 一、情景引入: 关于js的作用域,我们都知道: 1.js的作用域分两种,全局和局部 2.在js作用域环境中访问变量...
    追寻1989阅读 1,657评论 0 1

友情链接更多精彩内容