跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
JavaScript纯函数
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= JavaScript纯函数 = '''纯函数'''(Pure Function)是函数式编程中的核心概念之一,也是编写可预测、可维护代码的重要原则。在JavaScript中,纯函数具有以下两个关键特性: 1. '''相同的输入始终返回相同的输出'''(确定性) 2. '''不产生副作用'''(不会修改外部状态) == 特性详解 == === 1. 确定性 === 纯函数在给定相同输入时,总是返回相同的结果,不受外部状态影响。数学函数就是典型的纯函数,例如: <syntaxhighlight lang="javascript"> // 纯函数示例 function square(x) { return x * x; } console.log(square(5)); // 输出: 25 (无论调用多少次,结果都相同) </syntaxhighlight> === 2. 无副作用 === 纯函数不会修改任何外部状态,包括: * 不修改传入的参数 * 不修改全局变量 * 不进行I/O操作(如网络请求、文件读写) * 不调用非纯函数(如`Math.random()`或`Date.now()`) <syntaxhighlight lang="javascript"> // 非纯函数示例(有副作用) let counter = 0; function increment() { counter++; // 修改了外部变量 return counter; } // 纯函数版本 function pureIncrement(num) { return num + 1; // 不修改外部状态 } </syntaxhighlight> == 纯函数 vs 非纯函数 == <mermaid> flowchart LR A[函数] --> B[纯函数] A --> C[非纯函数] B --> D[确定性] B --> E[无副作用] C --> F[可能依赖外部状态] C --> G[可能有副作用] </mermaid> == 实际应用案例 == === 1. 数据处理 === 纯函数非常适合数据转换场景: <syntaxhighlight lang="javascript"> // 购物车价格计算(纯函数实现) function calculateTotal(cartItems) { return cartItems.reduce((total, item) => { return total + (item.price * item.quantity); }, 0); } const cart = [ { name: "Book", price: 10, quantity: 2 }, { name: "Pen", price: 2, quantity: 5 } ]; console.log(calculateTotal(cart)); // 输出: 30 </syntaxhighlight> === 2. React组件 === React推崇使用纯函数组件: <syntaxhighlight lang="javascript"> // React纯函数组件 function Welcome(props) { return <h1>Hello, {props.name}</h1>; } </syntaxhighlight> == 数学表示 == 纯函数可以用数学函数表示: <math> f(x) = y </math> 其中: * <math>x</math> 是输入 * <math>y</math> 是输出 * 对于相同的 <math>x</math>,总是得到相同的 <math>y</math> == 优点 == * '''可预测性''':结果只依赖输入,易于推理 * '''可测试性''':不需要复杂的环境设置 * '''可缓存性''':可以记忆化(memoize)结果 * '''并行安全''':无共享状态,可安全并行执行 == 注意事项 == 虽然纯函数有很多优点,但在实际开发中: 1. 应用不可能完全由纯函数组成(需要I/O等副作用) 2. 合理组合纯函数和非纯函数 3. 将副作用限制在可控范围内 == 练习示例 == 将以下非纯函数转换为纯函数: <syntaxhighlight lang="javascript"> // 原始版本(非纯) let discount = 0.1; function applyDiscount(price) { return price * (1 - discount); } // 纯函数版本 function pureApplyDiscount(price, discountRate) { return price * (1 - discountRate); } </syntaxhighlight> == 总结 == 纯函数是JavaScript函数式编程的基石,它们通过限制副作用和提高确定性使代码更可靠。虽然实际应用中需要与非纯函数配合使用,但尽可能多地使用纯函数能显著提高代码质量。 [[Category:编程语言]] [[Category:JavaScript]] [[Category:Javascript函数]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)