实现一个累加器sum(n)
2019-06-14 本文已影响0人
meow_possion
面试中遇到过几次的问题,记录下来方便以后查看。(今日头条面试题)
实现一个累加器sum(n),使得sum(1) 输入1,sum(1)(2)输出3,sum(1)(2)(3)输出6
思路:累加器中有记忆功能,第一反应就是用闭包实现, 题意体现出sum函数是可以无限调用的,所以sum的返回应该是一个函数。
具体代码实现如下,仅供参考
function sum(n){
let result = 0;
function getResult(n){
result += n;
console.log(result)
return getResult
}
return getResult(n)
}
扩散思维,假如题目变成,实现一个累加器sum(n),使得sum(1) 输入1,sum(2)输出3,sum(3)输出6,那么应该怎么实现呢?
思路:累加器中还是有记忆功能,但这次不是无限调用,而是记住上次调用的结果,那么还是用闭包实现。并且sum函数应该是一个立即调用函数,返回的结果是一个函数。
具体代码实现如下:
var sum = (function(n){
let result = 0;
return function(n){
n = n ? n : 0;
result += n;
return result;
};
})()