1. 实现 sum 函数使得以下表达式的值正确
sum(1,2,3).sumOf(); // 6
sum(2,3)(2).sumOf(); // 7
sum(1)(2)(3)(4).sumOf(); // 10
sum(2)(4,1)(2).sumOf(); // 9
首先我们不难发现这个sum函数的作用是返回所有参数相加的和,难点在于传参个数不限,并且可以无限循环调用。
先从最简单的 sum(1, 2, 3, 4)开始,这个我们可以很简单的实现:
function sum() {
let args = [].slice.call(arguments)
return args.reduce((a, b) => a + b)
}
再看 sum(1)(2)(3)(4)其实就是函数柯里化:
function sum(a) {
return function(b) {
return function(c) {
return function(d) {
return a + b + c + d
}
}
}
}
但是这里的参数个数是固定的。
我们再看回原题,我们可以把sum的作用看做是收集所有传入的参数,并返回了一个函数,这个函数有一个s

本文探讨了几道常见的JavaScript面试题。第一题涉及实现一个sum函数,能够处理无限数量的参数并正确求和。接着,介绍了如何在不允许使用全局变量的情况下,创建一个在奇数次调用时返回1,偶数次调用时返回2的函数,巧妙利用闭包实现。最后,提出了二进制字符串加法的实现问题,要求输入和输出都是二进制形式。
最低0.47元/天 解锁文章
16万+

被折叠的 条评论
为什么被折叠?



