函数的参数有实参和形参
形参可以当作局部变量
本质上是将实参赋值给形参
传递对象时,相当于obj=person,引用类型赋值的是地址,保存在堆内存中,指向同一个对象,person对多一个name
var person = {};
function setPerson(obj) {//形参
obj.name = 'xm';
}
setPerson(person);//实参
参数的个数
1.当实参==形参的个数,分别对应依次的
function add(num1, num2) {
return num1 + num2;
}
add(1, 2);
2.实参个数<形参个数
例如add(1),第一个数num1=1,第二个数num2=undefined
只有当我们的参数是可选参数,即选择性的传,不传的话可以不传。
像数学上的底数和幂数,当幂为2时选择性的不传
输出:9 27
function pow(base, power) {//base底数 power幂数
// if (!power) power = 2;//如果不存在给默认值2
power = power || 2;
return Math.pow(base, power);
}
console.log(pow(3));
console.log(pow(3, 3));
3.实参个数>形参个数
当我们有时候传参的时候传多了,可以使用arguments,用来保存实参的数组,如果长度为0则直接返回掉,显示未定义。
function add() {
if (arguments.length == 0) return;束
var sum = 0;
for (var i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
}
console.log(add());//undefined
console.log(add(1, 2, 3, 4, 5));//15
编写一个比较数字大小的函数min,它可以接收任意参数的函数,完成比较[2,4,1,-1,56,3,-7]中数字的大小,并用apply方法将参数一次性传递进去,并输出。
function min(){
var mins = arguments[0];
for(var i=0;i<arguments.length;i++){
if(mins>arguments[i]){
mins=arguments[i];
}
}
return mins;
}
var arr = new Array(2,4,1,-1,56,3,-7);
console.log(min.apply(window,arr));
arguments
arguments是一个类数组,不能够使用arguments.push();
不建议使用arguments[]来改变值
function fn(name) {
arguments[0] = '';
console.log(name);
}
fn('xm');//显示空串
arguments.callee指函数本身,一般用于递归,但是在严格模式下不允许使用,会出现报错
function jiecheng(num) {
if (num <= 1) return 1;
return num * arguments.callee(num - 1);//调用阶乘
}
console.log(jiecheng(5));
console.log(jiecheng(4));
判断实参和形参个数是否一致,形参的个数为add.length
function add(num1, num2) {
if (arguments.length != add.length) throw new Error('请传入' + add.length + '个参数!');
return num1 + num2;
}
console.log(add(1, 1));//2
console.log(add(1));//error
console.log(add(1, 2, 3));//error