遇到的问题
想做一个闹钟的控件,需要利用滚轮进行时间的增大与减小,同时也涉及一个循环数组的问题,简单描述为:
有一个数组[1,2,3]
,按空格键输出数组元素,当输出元素为3
时,再按一次空格键则输出1
其实解决这个问题比较简单,利用取模的思想即可完成,学到的东西是在我问 gpt 的过程中,看到了一个有记忆的一个函数--闭包。
闭包介绍
在函数中封装一个私有变量,外部不能访问,并且让函数具有记忆性。
实例
- 记忆性
javascript
function incre_num(){
let index = 0
return function (){
console.log(index)
index++
}
}
const print_incre_num = incre_num()
print_incre_num()
print_incre_num()
- 如果不用变量来储存,则其内部函数无法被外部调用,所以返回的就是 function 的字符串
- const 在此处的用法保证了 print_incre_num 不会被其他函数修改,导致功能失效。
- 函数工厂
避免了重复代码的出现,比如我需要写两个函数double()
和triple()
,double(x)
输出 x 的两倍,triple( x)
输出 x 的三倍,代码如下:
javascript
//常用写法
function double(x){
retrun x*2
}
function triple(x){
return x*3
}
// 函数工厂
function creat_func(x){
return function(num){
return num*x
}
}
const double = creat_func(2)
const triple = creat_func(3)
double(3)=6
triple(3)=9
可以看到double 的参数就是闭包函数里的内部函数的参数