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 的参数就是闭包函数里的内部函数的参数

相关推荐
lsx2024064 分钟前
SVN 创建版本库
开发语言
xiaotao1316 分钟前
01-编程基础与数学基石:Python错误与异常处理
开发语言·人工智能·python
小芝麻咿呀34 分钟前
vue--面试题第一部分
前端·javascript·vue.js
皮卡蛋炒饭.1 小时前
线程的概念和控制
java·开发语言·jvm
John.Lewis1 小时前
Python小课(1)认识Python
开发语言·python
一只大袋鼠1 小时前
MyBatis 入门详细实战教程(一):从环境搭建到查询运行
java·开发语言·数据库·mysql·mybatis
nibabaoo1 小时前
前端开发攻略---H5页面手机获取摄像头权限回显出画面并且同步到PC页面
javascript·websocket·实时音视频·实时同步·录制
早起傻一天~G1 小时前
vue2+element-UI表格封装
javascript·vue.js·ui
sonnet-10291 小时前
函数式接口和方法引用
java·开发语言·笔记
Bat U1 小时前
JavaEE|多线程(二)
java·开发语言