TypeScript柯里化函数执行逻辑及参数疑问咨询:固定参数与动态参数的区别与rain函数传参原理
理解TypeScript柯里化函数中的固定参数与动态参数
嘿,我来帮你拆解这段代码的执行逻辑,搞清楚固定参数和动态参数的区别,还有为什么rain函数可以接收参数~
首先,这段代码用到了**柯里化(Currying)**技术——简单说就是把一个多参数的函数拆成一系列单参数函数的嵌套调用。我们一步步来看:
1. 拆解appendEmoji的定义
先把箭头函数转成更直观的普通函数写法,你就能瞬间明白它的结构:
const appendEmoji = function(fixed: string) { // 外层函数接收固定参数fixed,返回一个新函数 return function(dynamic: string) { // 内层函数接收动态参数dynamic,返回拼接结果 return fixed + dynamic; }; };
外层函数负责接收固定参数,然后返回一个“记住了这个固定值”的内层函数;内层函数则负责接收动态参数,最后把两个值拼接起来。
2. 固定参数的作用:一次性确定,永久复用
当你执行const rain = appendEmoji('️')时,其实是调用了外层函数,把fixed的值固定成了'️'。这时候rain其实就是外层函数返回的那个内层函数,而且它通过闭包“记住”了fixed = '️'这个值——不管你后续怎么调用rain,这个固定值都不会变。
同理,const sun = appendEmoji('☀️')就是把另一个内层函数的fixed固定成了'☀️',sun也会一直记住这个值。
3. 动态参数的作用:每次调用灵活变化
既然rain是那个等待接收参数的内层函数,那你自然可以给它传参啦!比如rain(' today')就是给内层函数传入dynamic = ' today',内层函数把之前记住的'️'和' today'拼接,得到'️ today'并输出。
如果你再调用rain(' tomorrow'),动态参数换成' tomorrow',就会得到'️ tomorrow'——动态参数就是用来让你每次调用都能灵活调整的部分。
固定参数 vs 动态参数的核心区别
- 固定参数:在柯里化的外层函数传入,被闭包保存,后续所有对返回函数的调用都会复用这个值,是“一次确定,多次复用”的常量。
- 动态参数:在柯里化的内层函数传入,每次调用都可以指定不同的值,是“每次调用都能灵活变化”的变量。
内容的提问来源于stack exchange,提问作者Mo0nKizz
相关产品推荐
相关产品推荐

