作用域闭包

闭包是JavaScript中的一个重要概念,允许函数访问并操作外部作用域的变量。模块闭包通过返回内部函数实现封装和私有变量的访问。常见的闭包使用场景包括网络请求的回调、定时器和事件处理。然而,不当使用闭包可能导致内存泄漏,因为闭包保持了对外部变量的引用,阻止了垃圾回收机制清理内存。
摘要由CSDN通过智能技术生成

一.什么是闭包

  1. 定义:当一个函数可以访问到其它函数局部声明变量的函数,就是闭包。
  2. 举个例子有一个函数,它的属性一般情况我们访问不到,这涉及到函数作用域。
  3. 而闭包就是在这个函数内部再次声明一个函数,这个函数基于作用域的查询访问的到它上面函数的私有变量,我们将这个访问函数返回回去,那么我们就可以通过这个返回函数访问到变量,这就是闭包。

二.模块闭包

  1. 定义:为了创建必须调用一个包装的函数,并且返回一个包装函数私有的功能函数
    function people(name) {
      function SayMyName() {
       console.log(name);
      }
      return {
       SayMyName,
      };
    }
    let xiaoming = people("xiaoming");
    xiaoming.SayMyName();
  2.  在这个函数里面我们返回了一个函数SayMyName,使其打印出其内部的属性,相当于最简单的模块化方式。

三.闭包使用的场景

fetch("地址").then((response) => {
        function dispose() {
          return response.sort();
        }
        let sortResult = dispose();
      });
  1. 在上面的代码中发送了一个网络请求,我们在其请求成功的函数里面声明了一个函数dispose用于处理请求返回的结果,在dispose我们访问到了不在他这个作用域里面的变量response,这就是一个闭包。
  2. 当然像上面的场景还有很多,比如说定时器在一个点击事件里面你执行了一个定时器,在定时器执行结束以后你将某些属性比如说是元素上面的属性,传递给了另一个函数,这个函数去执行下面的操作   这也是个闭包,因为访问到了不属于他的属性。
  3. 场景还有很多,比如说在定时器、事件监听器、 Ajax 请求。

四.内存泄漏

回忆一下垃圾回收机制,js会去寻找你用不到的变量,去在内存中删除他,但是闭包传递的是什么,数据的引用对不对,你闭包处理数据或是别的什么一直都在使用他,js没办法删除他,当我们的代码这样的情况多次发生我们的内存是不是一直都得不到解放,这会导致内存占用的升高,甚至进程崩溃。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值