编写一个函数,使用sum(4,5)和sum(4)(5)都能得到相同的结果
//方法1:
function sum(x){//使用arguments对象模拟重载 if(arguments.length==2){ return arguments[0]+arguments[1]; }else{ return function (y){ return x+y; } } }
//方法2
function sum(x,y){
if(y!=='undefined'){
return x+y;
}else{
return function(y){
return x+y;
}
}
}
注:当调用一个函数的时候,JavaScript不要求参数的数目匹配函数定义中的参数数量。如果传递的参数数量大于函数定义中参
数数量,那么多余参数将简单地被忽略。另一方面,如果传递的参数数量小于函数定义中的参数数量,那么缺少的参数在函数中被引用时将会给一个undefined值。
解释:JavaScript中不支持重载,但可以使用arguments对象模拟重载效果。arguments对象是一个类数组的对象,对应于传递给函数的参数,其长度是由实参的个数决定的,而不是由形参的个数决定。
arguments对象是所有函数中可用的局部变量。你可以使用arguments对象在函数中引用函数的参数。此对象包含传递给函数的每个参数的条目,第一个条目的索引从0开始。
arguments是一个类数组对象,但不是一个Array,除了长度之外没有任何数组属性。例如,它没有pop(),但是它可以被转换为一个真正的数组。
如:var args=Array.prototype.slice.call(arguments);
var args=[].slice.call(arguments);
var args=Array.from(arguments)//ES2015
对于arguments对象需要注意有以下几点:
1、arguments对象仅在函数内部有效,在函数外部调用arguments对象会出现一个错误
2、arguments的typeof返回的是‘object’