一.作用:

将程序代码,封装成一个代码块 --- 类似于 将 css样式 封装成 选择器
函数  : function 名称(){ 封装的程序 }
1.封装:代码更加简洁
2.调用:声明式函数,可以在任意位置调用,程序执行更加方便
3.重复使用:封装在函数中的程序,可以通过调用函数名称,被重复使用

二.声明语法:

1.声明式

以关键词 function 来定义 封装函数
语法 :
       function 函数名称(参数){
           执行程序
           return 返回值;
       }

2.赋值式/匿名函数

定义函数时,不定义函数名称,将整个函数,赋值给变量
语法:
        var 变量 = function (参数){
            执行程序
            return 返回值;
        }

说明:

调用:

声明式 通过 函数名称() 来调用执行函数
赋值式/匿名函数 通过 变量() 来调用执行函数

区别:

声明式 可以先调用函数,后定义函数
赋值式 不行,必须要先定义函数,后调用函数
实际项目中,推荐大家使用,声明式来定义函数,不要使用赋值式来定义函数

三.函数的特点

1.函数的参数

函数的参数,是函数执行时,输入的执行数据
函数的参数,定义在函数的()中,称为形参
如果形参有多个,需要使用逗号间隔
调用程序时,必须要给给形参赋值实参
如果没有赋值的形参,执行的数据是 undefined
赋值时,实参和形参,是按照顺序,一一对应的赋值

2.函数的返回值

return 返回值/执行结果
函数中定义的数据,变量等,在函数外部不能被直接使用
为什么不能被执行接使用,我们在讲 闭包 时 会详细解释
如果要使用数据,必须要通过 return 定义返回值
函数执行时,会将 return 之后的数据,抛出函数外
可以被 各种操作 (变量存储,输出,运算符运算,字符串拼接...)
任意一个函数,如果没有定义 return 返回值 执行结果都是 undefined
函数的返回值是 通过 return 抛出的函数的变量中 存储的数据,不是抛出变量
return 会终止函数中之后所有的程序的执行
一个函数中,最终只会执行一个 return
 

四.参数的默认值:

在定义形参时,就给形参进行赋值操作
        // 在定义形参时,同时给形参赋值
        // 形参的本质就是定义在函数中的变量
        // 给形参赋值,等于就是在给一个变量赋值
            function fun(str='北京'){
                console.log( str );
            }
        // 调用 fun() 函数时, 没有赋值 实参
        // str 中 存储的 仍然是 定义时 赋值的数据北京
            fun();  //输出北京
        // 等于在给一个变量,进行重复赋值
        // 结果是,后赋值的数据,覆盖之前赋值的数据
        // 后赋值的上海,覆盖之前赋值的北京
        // 执行程序时,str存储的是上海
            fun('上海');  //输出上海

一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。