背景
柯里化(Currying)是前端面试和函数式编程中的高频概念,但在日常业务中经常被误用。
很多代码把“返回函数”都称为柯里化,导致抽象层级混乱,最终影响可读性与维护成本。
在工程实践中,柯里化的核心价值不在“写法炫技”,而在于:
- 固化部分参数,提升复用能力。
- 将多参数函数拆分为可组合的单参数链。
- 让业务表达更贴近“配置 + 执行”的模式。
核心原理
柯里化是什么
本质上,柯里化是把一个接收多个参数的函数,转换成一系列每次只接收部分参数的函数,直到参数满足后再执行。
柯里化(Currying)是前端面试和函数式编程中的高频概念,但在日常业务中经常被误用。
很多代码把“返回函数”都称为柯里化,导致抽象层级混乱,最终影响可读性与维护成本。
在工程实践中,柯里化的核心价值不在“写法炫技”,而在于:
本质上,柯里化是把一个接收多个参数的函数,转换成一系列每次只接收部分参数的函数,直到参数满足后再执行。
在前端开发中,“命令式”和“声明式”并不是抽象概念,而是每天都会遇到的设计选择:
需要关注的是,这不是二选一关系。现代前端工程通常是“声明式为主、命令式兜底”的混合架构。理解两者边界,有助于在可维护性、性能和开发效率之间做出更稳定的取舍。
命令式关注“怎么做”。开发者显式给出步骤、顺序和状态变更路径。
典型特征:
浏览器将一个 URL 渲染成可交互页面,本质上是两条流水线协同完成:
典型路径可以抽象为:
URL 输入 -> 请求发起 -> 响应返回 -> 解析构建 -> 布局绘制 -> 合成显示
浏览器在真正发请求前,会做一轮本地决策:
?? 是为“默认值表达”引入的语义化运算符。对于较旧浏览器,需要通过 Babel 转译或 polyfill 方案兼容。
空值合并运算符(nullish coalescing operator)的写法为两个问号 ??。
由于它对待 null 和 undefined 的方式类似,所以在本文中我们将使用一个特殊的术语对其进行表示。为简洁起见,当一个值既不是 null 也不是 undefined 时,我们将其称为“已定义的(defined)”。
值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)、Symbol
使用const定义
引用数据类型(对象类型):对象(Object)、数组(Array)、函数(Function),还有两个特殊的对象:正则(RegExp)和日期(Date)。
在JavaScript中,引用类型的数据指向创建对象的内存地址
const创建的对象为 变量的绑定不可变,即为绑定的对象内存地址不可变,内部数据可以改变
function* factorial(n) {
if(n===0) return 1;
let result = 1;
for (let i = 1; i <= n; i++) {
result *= i;
yield result; // 每次产出 i! 的值
}
}