JS闭包是是什么?

千锋逆战班,Rayson.Jin学习打卡第一天!
今天呢,就给大家介绍一下,什么是JS闭包,以及闭包的特点。

1.什么是闭包?

	闭包就是一个“定义在一个函数内部的函数”。

2.生成闭包的条件

		闭包的生成有三个必要条件(缺一不可)
      1. 在函数 A 内部直接或者间接返回一个函数 B
      2. B 函数内部使用着 A 函数的私有变量(私有数据)
      3. A 函数外部有一个变量接受着函数 B
      例如:
function a() {
          		// 这个 num 变量就是函数 a 的私有变量
				var num = 100
				return function b() {
					console.log(num)
				}
			 }
			  // res 接受的是 a 函数执行以后的返回值
		      // res 接受的就是函数 a 内部返回的一个复杂数据类型(函数b)
		      // 导致函数 a 的执行空间不会销毁
			 var res = a()
         这样就形成了一个不会销毁的函数空间,这个空间也叫做闭包空间。

3.闭包的特点

	闭包的特点(优点和缺点并存)
    1. 延长了变量的生命周期
        优点: 因为执行空间不销毁, 变量也没有销毁
        缺点: 因为执行空间不销毁, 会一直存在在内存中
    2. 可以访问函数内部的私有变量
        优点: 利用闭包函数可以访问函数内部的私有变量
        缺点: 执行空间不会销毁, 会一直存在在内存中
    3. 保护私有变量(只要是函数, 就有这个特点)
        优点: 保护私有变量不被外界访问
         缺点: 如果向访问, 必须要利用闭包函数
  闭包的函数的缺点 **致命**
      因为当一段内存空间中有一个不会被销毁的东西一直存在
      那么就会出现内存占用, 如果过多, 就会导致内存溢出
      那么结果就是 内存泄漏

4.闭包的作用

      当你需要延长变量的声明周期的时候
      或者你需要访问某一个函数内部的私有数据的时候
      你可以使用 闭包 函数来解决
      前提:
         如果有别的方法, 尽量不要使用闭包函数
         只有到没有招的时候, 我们在使用闭包函数
      闭包: 慎用

中国加油,武汉加油!千锋加油,自己加油!

发布了2 篇原创文章 · 获赞 14 · 访问量 170

猜你喜欢

转载自blog.csdn.net/RaysonJinS/article/details/104504121