0

0

JavaScript函数式编程_惰性求值

狼影

狼影

发布时间:2025-11-30 20:06:06

|

315人浏览过

|

来源于php中文网

原创

惰性求值通过延迟计算提升性能,JavaScript可用生成器模拟,如用function*创建无限序列,结合map、filter实现按需处理,再封装Lazy类支持链式调用,仅在toArray等终端操作时执行必要计算,适用于大数据、无限流与部分结果场景。

javascript函数式编程_惰性求值

惰性求值(Lazy Evaluation)是一种推迟表达式求值直到真正需要结果的编程策略。在JavaScript中,虽然语言本身采用的是严格求值(即立即求值),但我们可以通过函数式编程技巧模拟惰性求值,提升性能,尤其是在处理大量数据或复杂计算时。

什么是惰性求值?

惰性求值的核心思想是:不提前计算某个值,只有当它被实际使用时才进行计算。这能避免不必要的运算,节省时间和内存。

比如有一个数组映射操作:

[1, 2, 3, 4, 5].map(x => x * 2).filter(x => x > 5)

这段代码会立即执行所有map和filter操作,即使你只关心前两个结果。而惰性求值可以做到按需计算,只在取值时处理对应元素。

立即学习Java免费学习笔记(深入)”;

用生成器实现惰性序列

JavaScript中的生成器(Generator)是实现惰性求值的理想工具。它通过 yield 暂停执行,按需产生值。

例如,创建一个无限自然数序列:

function* naturals() {
  let n = 1;
  while (true) yield n++;
}

调用 naturals() 不会立即运行,而是返回一个可迭代对象。只有当你调用 next() 或用于 for...of 时,才会逐个计算。

结合 map 和 filter 的惰性版本:

function* map(iter, fn) {
  for (const x of iter) yield fn(x);
}
<p>function* filter(iter, pred) {
for (const x of iter) if (pred(x)) yield x;
}</p>

现在可以链式调用:

天工大模型
天工大模型

中国首个对标ChatGPT的双千亿级大语言模型

下载
const nums = map(filter(naturals(), x => x % 2 === 0), x => x ** 2);

上面代码没有执行任何计算,直到你开始取值:

nums.next(); // { value: 4, done: false }  (2²)
nums.next(); // { value: 16, done: false } (4²)

构造惰性链式API

我们可以封装一个类,让操作链更直观:

class Lazy {
  constructor(iterable) {
    this.iterable = iterable;
  }
<p>map(fn) {
return new Lazy(map(this.iterable, fn));
}</p><p>filter(pred) {
return new Lazy(filter(this.iterable, fn));
}</p><p>take(n) {
function* _take(iter, n) {
for (const x of iter) {
if (n <= 0) break;
yield x;
n--;
}
}
return new Lazy(_take(this.iterable, n));
}</p><p>toArray() {
return Array.from(this.iterable);
}
}</p>

使用方式:

const result = new Lazy(naturals())
  .filter(x => x % 2 === 0)
  .map(x => x * x)
  .take(3)
  .toArray();
<p>console.log(result); // [4, 16, 36]</p>

整个过程只计算了必要的6个自然数中符合条件的前3个平方,其余未执行。

惰性求值的优势与适用场景

惰性求值适合以下情况:

  • 处理大型或无限数据集(如日志流、传感器数据)
  • 多个转换操作串联,但只需要部分结果
  • 避免昂贵计算,除非确定要用到结果
  • 构建可复用、组合性强的数据处理管道

需要注意的是,惰性求值增加了逻辑复杂度,调试不如立即求值直观。同时,如果最终还是要全部求值,可能带来额外开销。

基本上就这些。通过生成器和迭代器,JavaScript也能很好地支持惰性求值模式,让函数式编程更高效灵活。

相关文章

编程速学教程(入门课程)
编程速学教程(入门课程)

编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

77

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

40

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

67

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

47

2025.11.27

function是什么
function是什么

function是函数的意思,是一段具有特定功能的可重复使用的代码块,是程序的基本组成单元之一,可以接受输入参数,执行特定的操作,并返回结果。本专题为大家提供function是什么的相关的文章、下载、课程内容,供大家免费下载体验。

499

2023.08.04

js函数function用法
js函数function用法

js函数function用法有:1、声明函数;2、调用函数;3、函数参数;4、函数返回值;5、匿名函数;6、函数作为参数;7、函数作用域;8、递归函数。本专题提供js函数function用法的相关文章内容,大家可以免费阅读。

166

2023.10.07

传感器故障解决方法
传感器故障解决方法

传感器故障排除指南:识别故障症状(如误读或错误代码)。检查电源和连接(确保连接牢固,无损坏)。校准传感器(遵循制造商说明)。诊断内部故障(目视检查、信号测试、环境影响评估)。更换传感器(选择相同规格,遵循安装说明)。验证修复(检查信号准确性,监测异常行为)。

498

2024.06.04

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

38

2026.03.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 6万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.4万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号