参考自廖雪峰老师官方网站的JavaScript教程
以下是对于函数的定义和调用&&arguments和rest参数的一些简单总结,用以日后复习
函数的定义
函数的定义
function abs(x){
if( x >= 0 ){
return x;
}else{
return -x;
}
}
注意: 函数执行到return语句就执行完毕,返回结果。如果没有return语句,会返回一个undefined
函数其实也是一个对象,函数名可以视为指向该函数的变量,所以
第二种定义函数的方式
var abs = function(x){
if( x >= 0 ){
return x;
}else{
return -x;
}
};
上面两种方式完全等价,但是第二种定义方式需要在末尾加上一个分号,表示赋值语句结束。
函数的调用
调用函数时,按顺序传入参数即可
abs(10);
javascript允许传入任意个参数而不影响调用,因此传入的参数比实际需要的参数多也没问题
abs(10,'aaaa');//返回10
传入的参数少也没问题
abs();//NaN 该函数收到的参数为undefined,计算结果为NaN
避免收到undefined,可以对参数进行检查
function abs(x){
if( typeof x != 'number' ){
throw 'Not a Number';
}
if( x >= 0 ){
return x;
}else{
return -x;
}
}
arguments
arguments指向传入的所有参数,它类似一个数组,但是不是数组
function foo(x){
console.log(x);//10
for( var i = 0; i < arguments.length; i++ ){
console.log(arguments[i]) //10 20 30
}
}
foo(10,20,30)
利用arguments可以获得传入的所有参数,即使函数没有形参,也还是可以拿到参数的值
function abs(){
if( arguments.length === 0 ){
return 0;
}
var x = arguments[0];
return x>0?x:-x;
}
abs(); //0
abs(10);//10
abs(-10);//10
事实上arguments最常用于判断传入参数的个数
foo(a,[b],c) 传入2-3个参数,b是可选参数, 若只传两个参数,b默认为null
function foo(a,b,c){
if( arguments.length === 2 ){
//实际拿到的是a和b两个参数,c为undefined
c = b;
b = null;
}
}
rest参数
JavaScript允许函数接收任意个参数,于是我们就不得不用arguments来接收所有参数
function foo(a,b){
var i,rest = [];
if( arguments.length > 2 ){
for( i = 2; i < arguments.length; i++ ){
rest.push(arguments[i]);
}
}
console.log(a);
console.log(b);
console.log(rest);
}
这种写法可以获取到额外的参数,把额外的参数放在一个rest数组里
ES6引入了rest参数
上面函数可以改写为
function foo(a,b,...rest){
console.log(a);
console.log(b);
console.log(rest);
}
//如果正常的参数都没有接收完全,也不要紧,rest参数会接收一个空数组,注意不是undefined