2 分钟内完成 JS 面试 / Currying 🥘

2025-06-07

2 分钟内完成 JS 面试 / Currying 🥘

问题:
JavaScript 中的柯里化是什么?

快速回答:
它是一种将接受多个参数的函数转换为每个只接受一个参数的函数链的技术。

更长的答案:
柯里化基本上就是高阶函数。它是 JavaScript 从其他函数返回函数的能力的一种应用。

n我们用一组函数替换一个接受参数的函数n,逐个应用这些函数可以得到与原始函数完全相同的答案。

我们可以通过示例立即学习。顺便说一下,感觉这个是最常见的。

// regular implementation
function add1(a, b) {
  return a + b;
}

console.log(add1(2,5)) // 7

// curried implementation
function add2(a) {
  return function(b) {
    return a + b
  }
}

console.log(add2(2)(5)) // 7
Enter fullscreen mode Exit fullscreen mode

就是这样。这就是柯里化。

更新:顺便说一下,也可以在评论部分查看@kspeakman关于柯里化与非柯里化部分应用的注释

实际应用:
乍一看,它可能看起来有点奇怪🤯为什么我们需要调用一个分离参数的函数?

你可以把它看作是函数执行前的准备工作。如果你有一些常用的操作,例如获取对象属性,可以将其转换为柯里化版本。

function searchUser {
  // ...
  user['id']
  // ...
}

function updateUser {
  // ...
  user['id']
  // ...
}

// user['id'] can be refactored with
let getUserId = user => user['id']

// Or you can go even further and implement generic getter
let pluck = name => object => object[name]
let getUserId = pluck('id')
let getUserName = pluck('name')

let name = getUserName(user)
Enter fullscreen mode Exit fullscreen mode

像这样的函数可以添加到一些辅助库中。例如RxJS.pluckRamda.pluck

吃一顿美味的咖喱🥘

资源:
wiki/Currying

其他帖子:


顺便说一句,我会在这里和推特上发布更多有趣的东西。我们做个朋友吧👋

文章来源:https://dev.to/hexnickk/js-interview-in-2-minutes-currying-2hko
PREV
2分钟搞定JS面试 / 高阶函数
NEXT
运行微服务的最简单方法:AWS 与 Heroku 的比较