Arguments Optional
创建一个计算两个参数之和的 function。如果只有一个参数,则返回一个 function,该 function 请求一个参数然后返回求和的结果。
例如,add(2, 3)
应该返回 5
,而 add(2)
应该返回一个 function。
调用这个有一个参数的返回的 function,返回求和的结果:
var sumTwoAnd = add(2);
sumTwoAnd(3)
返回 5
。
如果两个参数都不是有效的数字,则返回 undefined。
思路:
(1)如果输入的两个参数都是数字型,就直接返回两个参数之和;
(2)如果只有一个参数且这个参数为数字型,就创建一个闭包,请求第二个参数,如果第二个参数是数字型,就返回两个参数之和;
知识点:
(1)Arguments object是一个类似数组的对象, 对应于传递给函数的参数;
(2)Closures(闭包)是使用被作用域封闭的变量,函数,闭包等执行的一个函数的作用域;
(3)typeof操作符返回一个字符串,
指示未经
计算的操作数的类型。
代码:
1 function add() { 2 if(typeof arguments[0]==="number"&&typeof arguments[1]==="number"){ 3 return arguments[0]+arguments[1]; 4 }else if(arguments.length===1&&typeof arguments[0]==="number"){ 5 var num1=arguments[0]; 6 return function sumTwoAnd(num2){ 7 if(typeof num2==="number"){ 8 return num1+num2; 9 } 10 }; 11 } 12 } 13 14 15 add(2)(1);