# 函数式编程
函数式编程是一种编程范式,它强调将程序构建为函数的组合,主要通过函数来完成计算,而不是通过状态的改变或可变数据。
# 一、惰性函数
惰性函数(Lazy Function)是一种通过自覆盖机制实现动态优化的编程技术。其核心机制是在首次调用时执行初始化逻辑,并在此过程中将函数自身替换为优化后的版本。该技术通过消除重复的条件判断,有效提升后续调用时的执行效率。
# 全局变量版
问题:
- 全局变量污染
- 每次调用都进行条件检查
var t; // 污染全局命名空间
function foo() {
if (t) return t; // 每次调用都需判断
t = new Date()
return t;
}
# 闭包封装版
改进:
- ✅ 解决全局污染问题
- ❌ 保留重复判断缺陷
var foo = (function () {
var t; // 闭包存储状态
return function () {
if (t) return t; // 判断仍在每次调用时执行
t = new Date();
return t;
}
})();
# 函数属性版
函数也是一种对象,利用这个特性,我们也可以解决这个问题。
特点:
- ✅ 避免全局污染
- ❌ 仍然需要重复判断
function foo() {
if (foo.t) return foo.t; // 使用函数自身属性
foo.t = new Date();
return foo.t;
}
# 惰性函数版
惰性函数通过自覆盖机制动态优化执行逻辑,其核心原理是在首次调用时完成条件判断并重写自身,从而消除后续调用中的重复检测,提升执行效率。
核心机制:
- ✅ 函数自更新:首次调用后函数被替换为优化版本。
- ✅ 单次判断:后续调用直接返回缓存值。
var foo = () => {
const t = new Date(); // 初始化操作
foo = () => t; // 重写函数体
return foo(); // 返回结果
};