JavaScript

函数的定义和调用

2017-12-14  本文已影响0人  纯洁的大白纸

函数的定义

第一种:

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

上一篇 下一篇

猜你喜欢

热点阅读