js中怎么定义一个函数?
// 定义一个函数,求出参数中的最小值 function min(a,b,c,d...) { //函数的代码}
上面的函数怎么调用?
min(1,2,3,4,5,6,7...);
定义一个求两个数中最小值的函数
function min(a, b) { return a>b? b:a;}调用min(1,2);
- 1 函数的
形参
是什么?函数的形参是定义该函数时,你设置的函数参数个数 - 2 min函数的
形参
有几个?2个,a和b - 3 min函数的
实参
有几个?调用函数时传递几个就是有几个,上面调用时,我们传递了 1和2 ,那么实参
个数就是两个
问?既然实参
传递几个就是有几个,调用函数时,我传递的实参个数能不能大于形参个数?
function min(a, b) { return a>b? b:a;}var result=min(1,2,-1,4)console.log(result) //输出 1
以上代码说明,我们可以传递的参数大于形参个数,且不会出错。
- 为什么结果是1,而不是-1?对于函数来说,实参和形参是一一对应的,即a=1,b=2,我们的代码只要求a,b参数运算,那么结果自然是1。
问题来了,我们传递了4个参数,a,b用了,那么-1,4 这两个参数去哪了,我能不能拿到?
答案是,我们的另外两个参数被放在了函数的arguments
中,我们来看看arguments
是个什么
function min(a,b) { console.log(arguments); return a>b? b:a;}var result=min(2,6,90,10)console.log(result) //输出 2
- 原来我多传的参数在
arguments
中。实参有多少个,只要调用arguments.length
即可,当前有4个 - 函数的形参个数能不能知道?当然可以 , 形参个数就是
min.length
-
arguments
看着像是个数组,不过,它可并不是一个数组哦,它是个object类型的,
- 怎么取到所有的参数,就不言而喻了
for(var i in arguments){ console.log(arguments[i]) }
- 说了这么半天,这玩意儿有啥用处?
//两个数字中的最小值function min(a,b){ return Math.min(a,b);}min(1,2);//四个数字中的最小值function min(a, b, c, d){ return Math.min(a,b,c,d);}min(1, 2,3,4);//6个数字中的最小值function min(a, b, c, d,e,f){ return Math.min(a, b, c, d,e, f);}min(1, 2,3,4,5,6);//n个数字中的最小值function min(a, b, c, d,e,f,...n){ return Math.min(a, b, c, d,e, f,...n);}min(1, 2,3,4,5,6,...n);//随着我们要比较的数字的增多,我的函数形参数目也越来越多,//有了arguments这个对象,形参数目不就可以不写了么,像这样function min(){ var res=arguments[0] for(var i in arguments){ if(i==0) continue; res=res>arguments[i]?arguments[i]:res; } return res;}min(1, 2,3,4);//代码更精简点,还可以这样function min(){ return Math.min.apply(this,arguments);}min(1, 2,3,4,-1,2,0-3);//-3
那么我们可以少传么?
function min(a, b) { return a>b? b:a;}var result=min(1)console.log(result) //输出 1
以上代码说明,我们可以传递的参数小于形参个数,且不会出错。
为什么不会出错?因为当我们不给min函数传递 b 这个参数的时候,b这个参数为undefined
,这时候,a>undefined 为false,因为b转换为数值类型之后是 NaN。