函数的定义
第一种:
function abs(x){
if (x >= 0) {
return x;
} else {
return -x;
}
}
由于JavaScript的函数也是一个对象,上述定义的abs()函数实际上是一个函数对象,而函数名abs可以视为指向该函数的变量。所以有了第二种定义方式。
第二种:
var abs=function(x){
if (x >= 0) {
return x;
} else {
return -x;
}
}; //按照完整语法需要在函数体末尾加一个;,表示赋值语句结束。
这种方式下,该函数是一个匿名函数,但是赋值给了变量abs,因此可以通过变量abs来调用该函数。
函数的调用
调用时,按顺序传入参数即可。
由于JavaScript允许传入任意个参数而不影响调用,因此传入的参数比定义的参数多也没有问题,虽然函数内部并不需要这些参数:
传入的参数少哪?
abs()//此时abs(x)函数的参数x将收到undefined,计算结果为NaN。
要避免收到undefined
,可以对参数进行检查:
function abs(x) {
if (typeof x !== 'number') {
throw 'Not a number';
}
if (x >= 0) {
return x;
} else {
return -x;
}
}
arguments
关键字arguments
的作用域是 函数内部,永远指向传入函数的参数。arguments
类似于Array
但不是Array
。
使用方法:
function abs(){
if(arguments.length == 0){
return 0;
}
var temp = arguments[0];
return temp >= 0 ? temp:-temp;
}
abs();//返回0;
abs(9);//返回9;
abs(-9);//返回9;
应用场景:常用于判断传入参数的个数。
//foo(a, [b], c)
//接受2-3个参数,其中第二个参数 b 是可选参数;
function foo(a, b, c){
if(arguments.length === 2){
//实际拿到的参数是a和b,c是undefined;
c = b;//将b的值赋给c;
b = null;//把b变成默认值;
}
...//函数的具体实现;
}
//要想把中间的可选参数b变成默认值,只能通过`arguments`进行转换;
rest
rest
参数有ES6
标准引入。作用是获取除了已定义的参数之外的所有参数。
使用方法:
function foo(a, b, ...rest){
console.log('a = ' + a);
console.log('b = ' + b);
console.log(rest);
}
foo(1, 2, 3, 4, 5);
//a = 1, b = 2, c = Array[3, 4, 5];
foo(1);
//a = 1, b = undefined, Array[];
rest
要写在所有参数的最后,前面加上三个点...
,前两个参数绑定到a,b上,其余所有的参数以数组的形式,传给变量rest
。