LetmeLetmeLetme 2023-03-18 16:30 采纳率: 66.7%
浏览 35
已结题

根据闭包的特性,完成改功能

内容:使用闭包完成如下要求
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/363537621976190.jpg "#left

img

img

  • 写回答

3条回答 默认 最新

  • 「已注销」 2023-03-18 16:50
    关注

    参考GPT和自己的思路:以下是实现该功能的代码:

    function makeHistory(maxActions) {
      const actions = [];
      let index = -1;
      
      return function(action) {
        if (action === "undo") {
          if (index >= 0) {
            const lastAction = actions[index];
            index--;
            return `${lastAction} undone`;
          } else {
            return "nothing to do";
          }
        } else {
          if (actions.length >= maxActions) {
            actions.shift();
          }
          actions.push(action);
          index = actions.length - 1;
          return `${action} done`;
        }
      };
    }
    

    首先,我们定义一个 makeHistory 函数,该函数返回一个闭包函数。闭包函数内部维护了一个数组 actions,记录所有执行过的操作,以及一个变量 index,表示当前可以执行的操作的索引。

    在闭包函数内部,我们首先判断传入的操作是否为 "undo"。如果是 "undo",则需要检查是否还有操作可以撤销。如果 index 大于等于 0,则说明还有可以撤销的操作,将最近的一个操作取出来,index 减 1,然后返回撤销的信息。否则,说明没有可以撤销的操作了,直接返回提示信息。

    如果传入的操作不是 "undo",则需要将该操作加入到 actions 数组中。如果 actions 数组长度已经达到了 maxActions,则需要将最早的一个操作从数组中删除,保证数组长度不会超过 maxActions。然后将当前操作添加到数组中,更新 index 的值,最后返回操作完成的信息。

    使用示例:

    // 示例1
    const myActions = makeHistory(2); 
    console.log(myActions("jump")); // 'jump done'
    console.log(myActions("undo")); // 'jump undone'
    console.log(myActions("walk")); // 'walk done'
    console.log(myActions("code")); // 'code done'
    console.log(myActions("pose")); // 'pose done'
    console.log(myActions("undo")); // 'pose undone'
    console.log(myActions("undo")); // 'code undone'
    console.log(myActions("undo")); // 'nothing to do'
    
    // 示例2
    const myActions = makeHistory(1); 
    console.log(myActions("jump")); // 'jump done'
    console.log(myActions("undo")); // 'jump undone'
    console.log(myActions("undo")); // 'nothing to do'
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月26日
  • 已采纳回答 3月18日
  • 创建了问题 3月18日

悬赏问题

  • ¥30 comfyui openpose报错
  • ¥15 手机文件管理器导入视频到相册导致日期和分类错乱。
  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错
  • ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
  • ¥100 matlab2009 32位一直初始化
  • ¥15 Expected type 'str | PathLike[str]…… bytes' instead
  • ¥15 三极管电路求解,已知电阻电压和三级关放大倍数