最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

JavaScript闭包详细介绍

来源:动视网 责编:小采 时间:2020-11-27 20:03:46
文档

JavaScript闭包详细介绍

JavaScript闭包详细介绍:本文主要和大家详细介绍JavaScript闭包,说起闭包,相信写前端的同学都知道,而且相信在实际的项目中或多或少都已经用到了闭包。那到底什么才是闭包,闭包又是怎么产生的呢?1. 什么是闭包在阮老师的文章中提到:闭包就是能够读取其他函数内部变量的函数。由
推荐度:
导读JavaScript闭包详细介绍:本文主要和大家详细介绍JavaScript闭包,说起闭包,相信写前端的同学都知道,而且相信在实际的项目中或多或少都已经用到了闭包。那到底什么才是闭包,闭包又是怎么产生的呢?1. 什么是闭包在阮老师的文章中提到:闭包就是能够读取其他函数内部变量的函数。由


2. 闭包的作用
一个是可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

3. 一个简单的闭包实例

function count() { let num = 0; return function add() { return ++num;
 }
}let a = count();
a(); //1a(); //2

首先将count()的返回结果也就是count()函数里的返回的函数赋值给a。此时,count()中定义的局部变量num就被保存在内存中。当第一次调用a()时,返回++num,即1;当第二次调用a()时,由于此时num是1,所以返回的结果是2

4. 产生闭包的原因
相信很多人对这个问题都很困惑,都会认为一个函数中,返回一个函数,这样就形成了闭包。其实这仅仅是闭包产生的方法,而不是原因,下面将为大家解释原因。
产生的主要原因是因为JavaScript是词法作用域的,即在该函数定义时就已经被赋予了一个作用域。然后在运行时,又会根据实际运行情况被赋予运行时的作用域。通过这两个作用域一个JS函数才会被正确执行。
以上例为例,在执行count()的时候,该函数的作用域是

运行时作用域 num = 0
词法作用域

当count()执行时,返回add函数的时候,由于此时add处于定义状态,故返回时生成的该函数的词法作用域即为上述count()的作用域。所以当执行a()的时候,其真正的作用域是

add运行时的作用域
count运行时作用域 num = 0
count词法作用域

所以第一次调用add时,由于num是0,所以返回1;而第二次返回是2。

5. 总结
从上述的描述中,可以看出由于生成闭包的时候,外部函数的局部变量(运行时作用域)被内部函数作为词法作用域保存在内存中,故当内部函数被释放之前,该块内存是不会被释放的。因此在使用闭包时,需要非常注意内存泄漏的问题。

文档

JavaScript闭包详细介绍

JavaScript闭包详细介绍:本文主要和大家详细介绍JavaScript闭包,说起闭包,相信写前端的同学都知道,而且相信在实际的项目中或多或少都已经用到了闭包。那到底什么才是闭包,闭包又是怎么产生的呢?1. 什么是闭包在阮老师的文章中提到:闭包就是能够读取其他函数内部变量的函数。由
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top