[Intermediate Algorithm] - Arguments Optional

题目

创建一个计算两个参数之和的 function。如果只有一个参数,则返回一个 function,该 function 请求一个参数然后返回求和的结果。

例如,add(2, 3) 应该返回 5,而 add(2) 应该返回一个 function

调用这个有一个参数的返回的 function,返回求和的结果:

var sumTwoAnd = add(2);

sumTwoAnd(3) 返回 5

如果两个参数都不是有效的数字,则返回 undefined

提示

Closures
Arguments object

测试用例

  • add(2, 3) 应该返回 5
  • add(2)(3) 应该返回 5
  • add("http://bit.ly/IqT6zt") 应该返回 undefined
  • add(2, "3") 应该返回 undefined
  • add(2)([3]) 应该返回 undefined

分析思路

  1. 根据测试用例,需要先判断参数类型是否正确,使用 typeof 进行判断;
  2. 判断参数个数,为 1 则使用回调函数再传入下一个参数;
  3. 两个参数直接相加即可;

代码

function add() {
  for (var i = 0; i < arguments.length; i++) {
    if (typeof arguments[i] !== "number") {
      return undefined;
    }
  }
    
  if (arguments.length == 1){
    x = arguments[0];
    return function(val){
      if(typeof val == "number")
        return val + x;
      else
        return undefined;
    };
  }
  else {
    return arguments[0] + arguments[1];
  }
}

add(2,3);
posted @ 2017-05-25 16:53  water-moon  阅读(156)  评论(0编辑  收藏  举报