JS闭包深入浅出

发布于:2022-12-23 ⋅ 阅读:(545) ⋅ 点赞:(0)

前言

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


一、闭包是什么?

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

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. 组织好你的逻辑,避免死循环等造成的浏览器卡顿,崩溃问题。

四、闭包的应用场景

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


总结

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

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到