闭包就是能够读取其他函数内部变量的函数。
简介
闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。摘自百度百科。
应用
有些时候我们往往会使用全局变量来作为计数容器,这是一个不好的习惯。原因如下:
我们可以使用闭包来代替使用全局变量,具体使用见下边:
比如我们需要实现一个打字机效果,第一次调用的时候正向播放文本,第二次调用的时候逆向播放文本。我们需要使用到一个标志位用于切换两种效果。
首先是实现正、逆切换,函数cut()
:
1 |
<script> |
实现闭包:
我们将该函数封装在另一个函数play()
中,调用play就返回函数cut()
。
1 |
<script> |
案例
完善打字机案例
下边的内容与闭包没有关系了。使用闭包完善一下案例:打字机效果。
- 再将函数
play()
封装在一个函数show()
中。调用show()
函数会播放打字机动画,且返回动画所用时间。 - 函数
play()
后边添加调用(执行)play()
的部分,根据参数num设置播放次数。num:-1为正放一次,其他数字为正+逆。例如:-1,只正放一次。1,”正+逆“一次。2,”正+逆“两次。
1 |
let playFn = play(); //获取实现播放效果的函数 |
函数show()
:
1 |
//封装好的函数 |
播放多条文本
根据函数show()
返回的动画播放时间,使用嵌套的定时器即可实现播放多条文本的效果。
1 |
let word = document.querySelector('.word');//显示文本的容器 |