Js中闭包的概念和具体使用

闭包是JavaScript中的重要概念,它允许函数访问和修改其外部作用域的变量。闭包常用于保存变量状态、避免全局污染以及在VueJs等框架中创建自定义组合式hooks。然而,不恰当的闭包使用可能导致内存泄漏,需注意内存管理。
摘要由CSDN通过智能技术生成

前言

闭包在js里面是一个比较抽象的概念,但在面试里,是一个必问的话题,往往面试官希望你列举一些使用闭包的例子或手写一个闭包

闭包,简单一句话讲就是能够读取其他函数内部变量的函数,当需要函数内容部的变量被外部的代码所访问时

那闭包就非常有用了的,如今,很多框架里面的高级特性都得依赖闭包的

01

示例代码

function a() { // 定义函数a
    var n = 100; // 定义一个局部变量n
    var b = function() { // 定义函数b
        n++; // n自加1
        return n; // 返回n的值
    }
    return b; // a函数的返回结果值为函数b
} 

var c = a(); // 执行a函数,得到b,并赋值c
c(); // c函数执行n的值变为101
alert(c()); // 在打印一次值,却变量102

02

分析

这个局部变量的函数会被保存下来,在函数外部,是没有办法直接访问函数里面的变量的,但是通过闭包却可以

也就是说,它是用来连接内部函数与外部函数的一个桥梁,闭包产生的本质原因,是作用域链引起的,从而达到外部函数访问内部函数局部变量的目的,其中被嵌套函数就可以称为是一个闭包

闭包的真正目的,就是要把局部的函数永久的保存下来,被外部的变量和代码所访问和使用

当a函数中内部的函数被a函数以外的函数所访问到,那就可以称为一个闭包

闭包最常见的用途就是把一个变量永久的保存下来,而不是随着函数的执行完毕而被js的垃圾回收器所回收

那这样,也会带来一个问题,就是内存得不到及时的回收,有可能会产生内存溢出的危险,具体的解决办法就是,退出函数之前,将不使用的局部变量全部删除清空就可以了

如果你把父函数当做对象使用,把闭包当做它的公有方法,把内部变量当做它的私有属性,这时候,要注意不要随便的改变父函数的内部变量的值

03

闭包的用途

  1. 对外提供公有属性和方法(也就是函数外部读取函数内的局部变量)

  2. 保存变量于内存中,避免全局变量的污染(上面的一个示例就是的,局部变量被保存下来了的)

  3. 有时候需要一个模块中定义这样的变量,执行某些操作后,始终保存上一次的值,希望这个变量一直保存在内存中,但又不会污染全局变量,这个时候,我们就可以使用闭包

总结

bb2ce18bb164d947f3516648940814f0.gif

闭包的概念比较抽象,但是在js里面是一个非常重要的知识点,涉及到如何访问读取和修改变量,可以对外提供公有的属性和方法,保存变量于内存当中,避免全局变量的污染

VueJs中如何自定义hooks(组合式)函数

2023-01-06

4bf86800a6fc11bce368f1be6d1b3577.jpeg

js如何引用同级元素

2023-01-05

0f1b6755417ec98b411a73c942421f9c.jpeg

JS如何实现倒计时效果

2023-01-04

9a24e584c77e902f1570820748165cdf.jpeg

JS如何实现根据不同的时间段显示不同的欢迎语

2023-01-04

86313bcc060bd15cf425d1bf90ac46a2.jpeg
点击左下角查看更多

10154b7f14d6b895304bebc8f63c9c78.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值