函数
- 在js中函数是“一等公民”
- 函数是一个独立的作用域
- 函数是一种数据类型,与其他类型一样;特殊在可以执行
return 返回值
function xq(){
var a = 1;
alert(a);
}//定义一个函数 弹出a的值
xq();//执行这个函数 弹出1
alert(xq());//弹出1和undefined
- 任何一个函数 当没有定义返回值的时候 有个默认的返回值 undefined
- 不是所有函数都需要返回值
- return 可以终止函数的执行
参数
在函数定义的时候 可以写形参;在函数调用的时候写相应的实参。
函数可以有多个参数 参数的数据类型是任意的
形参个数>实参个数(调用时传递少了) 那么多余的形参就会被undefined代替
形参<实参个数(调用时传递多了),那么多余的将会被忽略
不定参数
JS中没有函数重载这个概念 参数由一个类似数组的形参传递的
利用arguments对象可以实现类似函数重载的效果
用法:判断arguments的长度
function zhenjiang(){
var len = arguments.length;
for(var i=0;i<len;i++){
if(1==len){//如果是一个参数 那么就输出本身
console.log(arguments[0]);
}else if(2==len){//如果是两个参数 那么就输出两者乘积
console.log(arguments[0] * arguments[1]);
}else if(3==len){//如果是三个参数 那么就输出三者的和
console.log(arguments[0] + arguments[1] + arguments[2]);
}
}
};
zhenjiang(1);//一个实参
zhenjiang(1,2);//两个实参
zhenjiang(1,2,3);//三个实参
arguments.callee
callee是arguments的一个属性 它可以用于引用函数体当前正在执行的函数 这个函数的名称未知时候很有用(匿名函数)【类似就近原则】
function jiecheng(num){
if(num==1) return 1;
//return num * jiecheng(num-1);//正常的书写方式 递归调用
return num * arguments.callee(num-1);
}
var result = jiecheng(5);
alert(result);//弹出120
function zhenjiang(a,b){
if(arguments.length == arguments.callee.length){
//判断实参和形参的个数是否匹配
alert("输入合法");
}else{
alert("输入的参数个数与函数参数个数不匹配");
}
}
zhenjiang(1,2);