JS闭包深入浅出

闭包是一种能够访问外部函数变量的内部函数,它可以隔离作用域,避免全局变量污染。闭包的特性包括在函数返回时保持激活状态以及防止变量被垃圾回收。优点是提供私有属性和方法,缺点可能导致内存泄漏。应用场景包括封装、函数防抖、节流、柯里化以及元素事件处理。避免内存泄漏的方法包括减少全局变量、及时解除引用和组织好逻辑。
摘要由CSDN通过智能技术生成

前言

首先我们得先了解闭包是什么,再深入的了解一下闭包的优缺点。


一、闭包是什么?

官方的回答就是:能够读取其他函数内部变量的函数叫做闭包。换句话说:函数嵌套,内层函数就形成了闭包。闭包简单理解成"定义在一个函数内部的函数"本质上说一个函数就是一个闭包。下面就写一个简单的闭包案例:

function F1(){
    var a = 10;
    return function(){
        console.log(a);
    }
}
var a = 20;
var f1 = F1();
f1();

二、闭包特点

1. 作为一个函数的返回值,当函数返回时,其处于激活状态。
2. 参数和变量不会被垃圾回收机制回收。

三、闭包优缺点

1.闭包优点

可以重复使用变量并且不会造成变量污染,可以隔离作用域,不会全局污染 闭包结合了全局变量和局部变量的优点,可以用来定义私有属性和私有方法 全局变量可以重复使用,但是容易造成变量污染,局部变量仅在局部作用域内有效,不可以重复使用,不会造成变量污染。

2.闭包缺点

闭包导致内存泄漏,因为闭包就是能够访问外部函数变量的一个函数,而函数是必须保存在内存中的对象,所以位于函数执行上下文中的所有变量也需要保存在内存中,这样就不会被回收,如果一旦循环引用或创建闭包,就会占据大量内存,可能会引起内存泄漏。

补充:什么是内存泄漏?

每个浏览器会有自己的一套回收机制,当分配出去的内存不使用的时候便会回收;内存泄露的根本原因就是你的代码中分配了一些‘顽固的’内存,浏览器无法进行回收,如果这些’顽固的’内存还在一直不停地分配就会导致后面所用内存不足,造成泄露。

避免内存泄漏

1. 减少不必要的全局变量,使用严格模式避免意外创建全局对象。

2. 在使用完数据后,及时解除引用(闭包中的变量,dom的引用,定时器清除)

3. 组织好你的逻辑,避免死循环等造成的浏览器卡顿,崩溃问题。

四、闭包的应用场景

封装功能时(需要使用私有的属性和方法),函数防抖、函数节流、函数柯里化、给元素伪数组添加事件需要使用元素的索引值。


总结

本文主要简单的介绍了闭包的概念、优缺点、应用场景

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值