函数的定义:

具有一定功能,封装成函数。

【函数三要素】

  • 函数名

  • 参数(形参,实参)

  • 返回值

  • 声明函数

    1、字面量创建(有叫声明式函数)

    function 函数名() {函数体}

    2、构造函数

    let 函数名 = new Function();
    console.log(typeof 函数名);//function

    3、函数表达式

    let 函数名1 = function 函数名2(){}
    函数名1();
    //匿名函数表达式
    let 函数名1 = function(){}
    函数名1();

    函数的调用:函数名();

返回值

在函数体里写return 表达式; 当函数没有返回值时会输出undefined

console.log(函数名());

function b(){
    return 1+2;
}
console.log(b());//3

参数

function c(a,b){
    return a+b;
}
console.log(c());//NaN
console.log(c(1,2));//3

形参:函数声明

1、形参个数多,多的形参值为undefined

function aa(a,b,c,d){
    console.log(a,b,c,d);
}
aa(1,2,3);//1 2 3 undefined
aa(1,2,3,4,5);//1 2 3 4

2、形参默认值:形参名=表达式

function dd(a,b="a",c){
    console.log(a,b,c);
}
dd();//undefined a undefined

3、【形参的个数】

函数名.length

注:不会统计默认值的形参,默认值以后的形参也不统计。因此,默认值的形参往后放。

function ee(a,b,c,d,e){
    console.log(ee.length);
}
ee();//5

function ff(a,b,c,d='a',e){
    console.log(ff.length);
}
ff();//3 当有默认值时,只统计到有默认值的前一个形参的个数

实参:函数调用

1、实参个数多,...标识符接收多的实参并转换为数组

function eg(a,b,c,...d){
    console.log(a,b,c,d);
}
eg(1,2,3,4,5);//1 2 3 [ 4, 5 ]

function bb(a,b,c,...d){
    // console.log(a,b,c,d);
    d.push("a");//可以用数组的方法
    console.log(d);
}
bb(1,2,3,4,5);//[ 4, 5, 'a' ]

2、arguments存储所有实参;arguments[下标]

【实参个数】

arguments.length

但arguments不是数组(类数组),原因:不能使用数组的方法

function cc(){
    console.log(arguments[0]);//1
    console.log(arguments[3]);//4
    // arguments.push("a");
    //报错 arguments.push is not a function
    console.log(arguments.length);//5
    console.log(arguments);//[Arguments] { '0': 1, '1': 2, '2': 3, '3': 4, '4': 5 }
    console.log(typeof arguments);//object
}
cc(1,2,3,4,5);