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

【JS-Leetcode】2621睡眠函数|2629复合函数|2665计数器||

文章目录

    • 2621睡眠函数
    • 2629复合函数
    • 2665计数器||

这三个题目涉及setTimeout、promise、数组reduce方法,闭包。

2621睡眠函数

请你编写一个异步函数,它接收一个正整数参数 millis ,并休眠 millis 毫秒。要求此函数可以解析任何值。
在这里插入图片描述

  • 原理:返回一个promise,在这个promise中进行一个对应时长的延迟setTimeout,延迟结束执行resolve。
async function sleep(millis) {return new Promise((resolve,reject)=> {setTimeout(()=>{resolve();},millis)})
}

setTimeout的本质是延迟执行,只执行一次。一般用于延迟指定的时间后执行一次回调函数。
setInterval的本质是定时执行,会不断重复执行,直到取消。所以这个题要用setTimeout。

2629复合函数

请你编写一个函数,它接收一个函数数组 [f1, f2, f3,…, fn] ,并返回一个新的函数 fn ,它是函数数组的 复合函数 。
[f(x), g(x), h(x)] 的 复合函数 为 fn(x) = f(g(h(x))) 。
一个空函数列表的 复合函数 是 恒等函数 f(x) = x 。
你可以假设数组中的每个函数接受一个整型参数作为输入,并返回一个整型作为输出。
在这里插入图片描述

  • 原理:初始值为x,(param,fn)代表param初始值= x,而当前正在处理的数组元素是fn,箭头函数执行fn(param),然后将结果赋给param,作为下一个fn的入参,由于从右往左执行,因此使用reduceRight代替reduce。
/*** @param {Function[]} functions* @return {Function}*/
var compose = function(functions) {  return function(x) {return functions.reduceRight((param,fn)=>fn(param),x)}
};
/*** const fn = compose([x => x + 1, x => 2 * x])* fn(4) // 9*/
  • 如果这里functions.reduceRight((target,fn)=>fn(target),x)还是感觉很晕,可以
    对应数组累加和arr.reduce((acc,curvalue)=>acc+curvalue,0)进行理解。
    还不理解就要补点reduce的语法知识了,看JS数组方法reduce来深入了解一下reduce的语法。

2665计数器||

请你写一个函数 createCounter。这个函数接收一个初始的整数值 init。并返回一个包含三个函数的对象。
这三个函数是:
increment() 将当前值加 1 并返回。
decrement() 将当前值减 1 并返回。
reset() 将当前值设置为 init 并返回。
在这里插入图片描述
原理:闭包。
什么是闭包?
闭包指的是一个函数可以记住其外部变量并且可以访问这些外部变量

函数在创建时,会创建一个隐藏起来的environment属性,这个属性记住了它们创建的位置,当在函数内部找不到变量时,它们可以访问外部变量。

在increment()中并没有定义temp,于是访问createCounter()中的temp,++temp会返回+1后的结果,同时这也将修改外部temp的值,所以如果连续调用就会持续加1。其他函数同理。

/*** @param {integer} init* @return { increment: Function, decrement: Function, reset: Function }*/
var createCounter = function(init) {let temp = init;return { increment:function(){return ++temp;},decrement:function(){return --temp;},reset:function(){temp = init;return temp;}}
};

相关文章:

  • 2025上海车展 | 移远通信重磅发布AR脚踢毫米波雷达,重新定义“无接触交互”尾门
  • C++之异常
  • (云计算HCIP)HCIP全笔记(九)本篇介绍操作系统基础,内容包含:操作系统组成、分类和定义,Linux的特性结构和Linux版本分类
  • 使用Three.js搭建自己的3Dweb模型(从0到1无废话版本)
  • 基于WebRTC技术,EasyRTC音视频实时通话助力全网会议的智能化转型
  • 虚函数表的设计和多态的实现
  • Vue3 Element Plus el-tabs数据刷新方法
  • 头歌实训之游标触发器
  • Android LiveData关键代码
  • 对鸿蒙 Next 系统“成熟论”的深度剖析-优雅草卓伊凡
  • 游戏哪些接口会暴露源IP?_深度解析服务器通信安全隐患
  • 关于 Web 服务器的五个案例
  • 迷你世界UGC3.0脚本Wiki组件说明
  • 进程控制的学习
  • Ubuntu 磁盘空间占用清理(宝塔)
  • 蓝桥杯 16. 密文搜索
  • C# 利用log4net 工作台打印和保存到文件
  • Redis使用总结
  • 从基础到实战的量化交易全流程学习:1.3 数学与统计学基础——概率与统计基础 | 数字特征
  • MIT6.S081 - Lab10 mmap(文件内存映射)
  • 广东一公司违规开展学科培训被罚没470万,已注销营业执照
  • 野猪穿过江苏电视台楼前广场,被抓捕后送往红山森林动物园
  • 规范涉企案件审判执行工作,最高法今天发布通知
  • 政治局会议深读|首提“持续巩固房地产市场稳定态势”,楼市政策还有哪些优化空间
  • 俄方证实俄总统普京正在会见美特使威特科夫
  • 政治局会议:创新推出债券市场的“科技板”,加快实施“人工智能+”行动