手记

函数定义与调用[JavaScript之美]

一、函数定义的三种方式:(推荐使用前两种) 1、function语句:
//格式:
/*function 函数名称([形参, ...]) //{[形参, ...]并不是一个数组参数,而是这个参数可以写也可以不写(即函数可以有参数,也可以没有参数)
        //代码段
        return 返回值;
}*/
//定义:
function fnDefineFunn(arg1, arg2) {
    console.log("function语句---------------------");
    return arg1 + arg2;
}
fnDefineFunn(1, 2);
2、函数直接量:
//格式:
 /*var 函数名称 = function([形参, ...]) {
        //代码段
        return 返回值;
};*/
//定义:
var fnDefineFunn = function(arg1, arg2) {
    console.log("函数直接量---------------------");
    return arg1 + arg2;
};
fnDefineFunn(3, 4);
3、 Function构造函数:
//格式:
//var 函数名称 = new Function("形参1", "形参2", "代码段;return 返回值;");
//定义:
var fnDefineFunn = 
            new Function("arg1", "arg2", "console.log('构造函数---------------------'); return arg1+arg2;");
console.log(fnDefineFunn(1, 2));
使用须知:
  1. 函数名严格区分大小写,如果重复了,后面的会覆盖前面的(并且与形参个数无关)
  2. 形参只要指定名称即可,可以没有,可以有多个
  3. 函数可以有返回值,也可以没有,没有时返回的是undefined
  4. 如果不调用函数,函数体不会执行
二、函数调用:

你应该理解:

//区别形参和实参
    //形参:定义函数时()中指定的参数,本质是变量
    //实参:调用函数时()中指定的参数,本质是数据

//实参个数可以和形参个数不同
    //1. 如果实参多了,后面多的实参会被忽略
    //2. 如果实参少了,后面多的形参会被赋值为undefined
//实参与形参个数不同:
function fnInvokeFunn(arg1, arg2) {
    return arg1 + arg2;
}

console.log(fnInvokeFunn(3));//NaN, 多的形参被赋值为undefined, 所以 3+undefined = NaN
console.log(fnInvokeFunn(3, 4));//7
console.log(fnInvokeFunn(3, 4, 5));//7, 忽略多的实参

思考:实参个数可以和形参个数不同,这有什么用?
需求:我想求若干个数的和,这个若干可以是2个数,3个数......,怎么做?

//先上代码: 
function fnSum() {
    console.log(arguments);
    var sum = 0;
    for(var i = 0; i < arguments.length; i++) {
        sum += arguments[i];
    }
    return sum;
}
console.log(fnSum(1));  //1
console.log(fnSum(1, 2)); //3
console.log(fnSum(1, 2, 3)); //6
arguments:

怎样理解arguments?

是什么?what
    在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们。(W3School)

为什么用?why
    用 arguments 对象判断传递给函数的参数个数,即可模拟函数重载:(W3School)

怎么用?how
    还可以用 arguments 对象检测函数的参数(指的是实参)个数,引用属性 arguments.length 即可(W3School)

arguments本质:

arguments可以看作是由实参组成的数组(伪数组),数组中的元素就是你传入的一个个实参。
    然而arguments并不是一个真正的数组, 并不能像操作数组一样操作arguments(没有数组该有的方法push、pop...)。
使用方式:
    1. arguments可以像数组一样有length属性,值为数组元素的个数,即传入实参的个数
    2. arguments可以像数组一样通过[下标]获取元素,下标区间为[0, arguments.length-1],即0到数组长度-1。
11人推荐
随时随地看视频
慕课网APP