函数式编程:如何将依赖全局变量的函数转为纯函数?含代码改造需求
如何将依赖全局变量的函数转换为纯函数及代码改造方案
通用转换思路
把依赖全局变量的函数改造为纯函数,核心是消除隐式依赖,让函数的所有输入都通过参数显式声明,常用手段包括:
- 显式注入依赖:将原本依赖的全局函数/变量作为参数传递给目标函数,让依赖关系完全透明。
- 内联依赖逻辑:如果依赖的逻辑简单且仅服务于当前函数,直接把逻辑写入目标函数内部,彻底摆脱外部依赖。
- 封装内部依赖:将依赖的函数定义在目标函数内部作为私有逻辑,既保留代码模块化,又消除对全局变量的依赖。
针对给定代码的改造方案
原代码中power函数依赖全局的multiplyByFour和sumElements,要将其改造为仅接收array作为唯一参数的纯函数,有两种可行方案:
方案一:内联依赖逻辑
直接把两个依赖函数的逻辑整合到power内部,完全消除外部依赖:
function power(arr) { const lengthArray = arr.length; // 内联 multiplyByFour 的处理逻辑 const multipliedArray = arr.map(item => item * 4); // 内联 sumElements 的处理逻辑 const sum = multipliedArray.reduce((total, num) => total + num); return Math.pow(sum, lengthArray); } console.log(power([3, 4, 2])); // 输出 36864
方案二:内部定义依赖函数
如果希望保持逻辑的模块化拆分,可以将两个依赖函数定义在power内部,既保留代码清晰性,又避免全局依赖:
function power(arr) { // 内部定义依赖函数,不依赖全局变量 const multiplyByFour = array => array.map(item => item * 4); const sumElements = array => array.reduce((total, num) => total + num); const lengthArray = arr.length; const value = sumElements(multiplyByFour(arr)); return Math.pow(value, lengthArray); } console.log(power([3, 4, 2])); // 输出 36864
改造后的纯函数特性
改造后的power函数完全符合纯函数定义:
- 仅依赖输入的
arr参数,无任何隐式依赖 - 相同输入始终返回相同输出
- 不会产生任何副作用(不修改全局状态、不依赖外部可变值)
内容的提问来源于stack exchange,提问作者daego
相关产品推荐
相关产品推荐

