Javascript笔记(一):闭包函数

遇到的问题

想做一个闹钟的控件,需要利用滚轮进行时间的增大与减小,同时也涉及一个循环数组的问题,简单描述为:

有一个数组[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 的参数就是闭包函数里的内部函数的参数

相关推荐
阿幸软件杂货间12 分钟前
Office转PDF转换器v1.0.py
开发语言·pdf·c#
蚂蚁RichLab前端团队18 分钟前
🚀🚀🚀 RichLab - 花呗前端团队招贤纳士 - 【转岗/内推/社招】
前端·javascript·人工智能
扯淡的闲人22 分钟前
多语言编码Agent解决方案(5)-IntelliJ插件实现
开发语言·python
周周记笔记29 分钟前
学习笔记:第一个Python程序
笔记·学习
丑小鸭是白天鹅31 分钟前
Kotlin协程详细笔记之切线程和挂起函数
开发语言·笔记·kotlin
潘达斯奈基~33 分钟前
《大数据之路1》笔记2:数据模型
大数据·笔记
萌萌哒草头将军35 分钟前
Oxc 和 Rolldown Q4 更新计划速览!🚀🚀🚀
javascript·vue.js·vite
sali-tec41 分钟前
C# 基于halcon的视觉工作流-章34-环状测量
开发语言·图像处理·算法·计算机视觉·c#
java搬砖工-苤-初心不变41 分钟前
基于 lua_shared_dict 的本地内存限流实现
开发语言·junit·lua
..过云雨1 小时前
05.【Linux系统编程】进程(冯诺依曼体系结构、进程概念、进程状态(注意僵尸和孤儿)、进程优先级、进程切换和调度)
linux·笔记·学习