JavaScript基础(二)闭包

55 阅读2分钟

大家好,我是蓝胖子的小叮当,今天分享的是JavaScript的第二章闭包,大家在阅读期间有任何的意见或建议都可以留言给我哈!

2.1引言

在聊闭包之前先了解一下前置知识

1.变量作用域

变量根据作用域的不同分为两种:全局变量和局部变量

  1. 函数内部可以使用全局变量
  2. 函数外部不可以使用局部变量
  3. 当函数执行完毕后,本作用域内的局部变量会销毁
2.2闭包详解

了解完上述变量作用域的知识后,让我们来了解闭包

1.介绍

闭包指有权访问另一个函数作用域中变量的函数。简单理解就是:一个作用域可以访问另一个函数内部的局部变量。

function fn1(){
    var num=10
    function fn2(){
        console.log(num)
    }
    fn2()
}
fn1()
//fn1就是闭包函数

2.作用

如上述简单示例可以了解到闭包的作用是:延伸变量的作用范围,延长了所有外层局部变量的生存周期。

3.闭包的致命缺点

因为执行空间不会销毁,会一直存在内存中不被销毁,就会出现内存占用,当占用过多时,导致内存溢出,结果就容易造成内存泄漏。

4.应用场景

//数据封装和信息隐藏
//使用闭包可以创建私有变量,这些变量无法被外部直接访问
//这是实现模块或构造函数中数据隐藏的一种方式
function createCounter(){
  let count=0
  return function increment(){
    count++
    console.log(count)
  }
}
const counter=createCounter()
counter() //打印为1
counter() //打印为2
console.log(count) //报错 count is not defined
// 每次调用counter,将增加count,但count本身无法被外部访问

5.注意

当你需要延长变量的生命周期或者需要访问函数里面的私有变量或者私有数据,可以使用闭包,但如果有别的办法,就尽量不使用闭包,慎用闭包,因为容易造成内存泄漏。

好啦,关于闭包的知识点就总结到这里,如果有什么疑问、意见或建议,都可畅所欲言,谢谢大家。