当前位置: 首页 > article >正文

Javascript 笔记(二):闭包(2)与map知识点

需求

要写一个闹钟控件,分为小时和分钟两个部分。两个部分的逻辑是一样的,只有域不同所以为了提高代码利用率,就使用闭包来完成。

问题

function loop_tuple(){
    let index = 0
    return function(tuple){
        index=(index+1)%3
        return tuple[index]

    }
}
const a =[4,5,6]
const b = [7,8,9]
const Loop_tuple = loop_tuple()

console.log(Loop_tuple(a))//4
console.log(Loop_tuple(a))//5
console.log(Loop_tuple(b))//9
console.log(Loop_tuple(b))//7
console.log(Loop_tuple(a))//5

bug是传入a和b的时候,两者是共用index,而不是两者分别有一个index。

解决方法

方法一:利用字典map

该方法是问了gpt得出来的,同时也是学习一下map的用法。

1️⃣map知识点

  • map是一个字典,其keyvalue是比较自由的
  • .set(key,value):设置键值对
  • .get(key):获取键对应的值
  • .has(key):检查是否含有键
  • .delete(key):删除键
  • .clear():清空字典
  • .size:返回字典的大小

2️⃣代码

function loop_tuple() {
    // 创建一个对象,用于保存每个数组的index
    const indices = new Map();
    
    return function(tuple) {
        // 如果此数组没有对应的index,初始化为0
        if (!indices.has(tuple)) {
            indices.set(tuple, 0);
        }
        
        // 获取此数组的index并更新
        let index = indices.get(tuple);
        indices.set(tuple, (index + 1) % tuple.length);

        return tuple[index];
    }
}

const a = [4, 5, 6];
const b = [7, 8, 9];
const Loop_tuple = loop_tuple();

console.log(Loop_tuple(a)); // 4
console.log(Loop_tuple(a)); // 5
console.log(Loop_tuple(a)); // 6
console.log(Loop_tuple(a)); // 4
console.log(Loop_tuple(b)); // 7
console.log(Loop_tuple(a)); // 5

该方法就是建立一个字典,字典的键就是两个数组,然后每当函数传入不同的数组的是,就从字典里取出对应数组的index即可。

方法二:函数工厂

1️⃣思路来源

如我在内部函数里传参就会导致两个函数共用外部函数里面的变量,所以我直接在外部函数传参。

2️⃣代码

function loop_tuple(tuple){
    let index=0
    return function(){
        const value = tuple[index]
        index=(index+1)%tuple.length
        return value

    }
}
const a =[4,5,6]
const b = [7,8,9]
const Loop_tuple_a = loop_tuple(a)
const Loop_tuple_b = loop_tuple(b)
console.log(Loop_tuple_a())
console.log(Loop_tuple_b())
console.log(Loop_tuple_a())

3️⃣错误记录

此处自己还糊涂了,也记录一下

	return function(){
        index=(index+1)%tuple.length
        return tuple[index]
    }

如此一写输出值就从第二个元素开始输出了,后面想着调换一下顺序

	return function(){
        return tuple[index]
        index=(index+1)%tuple.length
    }

这个错误太低级了
这样导致现return了,后面的部分根部就不会执行。求助gpt才知道只要先声明一个变量value接受值即可。


http://www.kler.cn/a/391802.html

相关文章:

  • 微信小程序=》基础=》常见问题=》性能总结
  • ReactPress技术揭秘
  • Hadoop(环境搭建篇)
  • 初始JavaEE篇 —— 网络编程(2):了解套接字,从0到1实现回显服务器
  • 红日靶机(七)笔记
  • 15 个改变世界的开源项目:塑造现代技术的先锋力量
  • 如何对PHP的API接口权限认证
  • ubuntu串口权限修改
  • PO 证书链
  • Vue.js动态组件使用
  • 179页PPT企业架构规划设计方案
  • 假期增加2天!matplotlib绘制2025年一整年日历
  • Ai创作新风标!仅需三步,利用ai工具免费制作抖音爆款的动物融合视频(含完整的步骤)
  • 深入理解接口测试:实用指南与最佳实践5.0(二)
  • Java基础-Java多线程机制
  • 【activiti工作流源码集成】springboot+activiti+mysql+vue+redis工作流审批流集成整合业务绑定表单流程图会签驳回
  • Vim9 语法高亮syntax 在指定的缓冲区和窗口执行命令
  • Java 中的 Predicate:让判断逻辑更清晰灵活
  • 把越南语翻译成中文一般用什么翻译工具?《越南语翻译通》App或许能满足你的技术痛点需求!
  • OpenHarmony4.1蓝牙芯片如何适配?触觉智能RK3568主板SBC3568演示
  • 【大语言模型】ACL2024论文-09 无监督信息精细化训练用于增强大型语言模型的检索增强生成
  • 从美国大选,看软件安全风险与挑战
  • 利用阿里云下载 WebRTC 源码
  • Golang 编码(url,base64,hex,md5,sha-1)
  • 鸿蒙应用权限控制与位置服务(Location Kit)
  • LeetCode【0016】最接近的三数之和