log
码中赤兔

[TS] 使用惰性函数优化重复逻辑

发布于 2024年12月9日
更新于 2025年1月5日
8 分钟阅读
TypeScriptJavaScript

什么是惰性函数?

惰性函数(Lazy Function) 是一种高级的编程模式,指的是函数在第一次调用时完成初始化,并根据需要动态修改自身的实现,从而优化后续调用的性能。

惰性函数的目的

通过惰性函数,可以避免不必要的重复判断或初始化逻辑,从而提高代码效率。例如,如果某个条件只需要判断一次,之后的调用完全可以直接复用已有的处理逻辑。惰性函数正是为了实现这一优化的编程模式。


使用场景

假设我们需要在 JavaScript(或 TypeScript)中将一个字符串复制到剪贴板。实现逻辑可能如下:

const copyTextToClipboard = (text: string) => {
  if (navigator.clipboard) {
    // 使用剪贴板 API
    navigator.clipboard.writeText(text);
  } else {
    // 旧浏览器的回退方案
    const textarea = document.createElement('textarea');
    textarea.value = text;
    textarea.style.position = 'fixed'; // 避免文本框出现在视图中
    textarea.style.top = '-9999px';
    document.body.appendChild(textarea);
    textarea.focus();
    textarea.select();
    try {
      document.execCommand('copy');
      console.log('Text copied to clipboard successfully (fallback)!');
    } catch (err) {
      console.error('Fallback: Failed to copy text: ', err);
    }
    document.body.removeChild(textarea);
  }
};

// 调用函数
copyTextToClipboard('需要复制的文本');

在这个实现中,每次调用 copyTextToClipboard 时都会判断当前浏览器是否支持 navigator.clipboard API。然而,这个判断实际上只需要执行一次,因为浏览器的能力是不会变化的。之后的每次调用都重复执行判断逻辑是多余的。

这时,惰性函数的优势就体现出来了。


使用惰性函数优化代码

通过函数重写的方式,我们可以让判断逻辑只执行一次。代码如下:

let copyToClipboard = (text: string) => {
  if (navigator.clipboard) {
    // 函数重写
    copyToClipboard = (text: string) => {
      navigator.clipboard.writeText(text);
    };
  } else {
    // 函数重写
    copyToClipboard = (text: string) => {
      const textarea = document.createElement('textarea');
      textarea.value = text;
      textarea.style.position = 'fixed'; // 避免文本框出现在视图中
      textarea.style.top = '-9999px';
      document.body.appendChild(textarea);
      textarea.focus();
      textarea.select();
      try {
        document.execCommand('copy');
        console.log('Text copied to clipboard successfully (fallback)!');
      } catch (err) {
        console.error('Fallback: Failed to copy text: ', err);
      }
      document.body.removeChild(textarea);
    };
  }
  // 初次调用逻辑
  copyToClipboard(text);
};

优化后的工作机制

  1. 首次调用时:
  • 判断浏览器是否支持 navigator.clipboard
  • 根据判断结果,动态重写 copyToClipboard 函数的实现。
  • 执行首次的逻辑。
  1. 后续调用时:
  • 无需再次判断,直接执行已经重写的逻辑。

优势解析

  1. 性能优化:避免了重复的判断逻辑,提升了运行效率。
  2. 代码简洁性:在后续调用中,函数已经根据实际情况调整为最优实现,减少了不必要的分支逻辑。
  3. 增强可维护性:逻辑清晰且易于扩展。若未来需要支持更多逻辑分支,只需调整首次判断和重写的内容即可。

结语

惰性函数是一种优雅而高效的编程模式,特别适合需要执行一次性初始化判断的场景。通过这种模式,我们可以让代码更高效、简洁,同时兼具良好的扩展性。如果你在项目中发现类似重复的逻辑判断,不妨试试惰性函数的实现!

关于

分享技术见解、经验和思考的个人博客

联系方式

  • Email: hushukang_blog@proton.me
  • GitHub

© 2025 码中赤兔. 版权所有