函数提升
- 函数提升与变量提升比较类似。
说明:
- 函数提升提升到当前作用域最前面
- 函数提升只提升声明,不提升调用
- 函数表达式不存在提升的现象
- 函数提升能够使函数的声明调用更灵活
function声明的函数
函数表达式
- 报错
var 声明函数表达式
- 所有var声明的变量会在执行之前,提升到当前作用域的最前面
- var声明的变量,如果不赋值,默认为undefined
函数参数
1.arguments对象
- 除箭头函数外,所有函数都内置了(默认的,自带的)一个arguments 对象.
- 它是一个伪数组,(有length;有索引,但是没有数组的方法)存储了函数传过来的所有实参.
- arguments对象只存在于函数中
示例:
- 输出结果:
2.剩余参数rest
- 语法: (
...变量名) 变量名是我们自己定义的
- 剩余参数是一个真数组,存了剩余的实参
- 只能放到参数的最后一位
- 剩余参数: 用于获取多余的实参,并形成一个真数组
- 可以解决形参和实参个数不匹配的问题
示例1:
- 输出结果:
示例2:
- 多个参数情况
- 输出结果:
剩余参数和arguments区别
- ... 是语法符号,置于最末函数形参之前,用于获取多余的实参
- 借助 ... 获取的剩余实参,是个真数组
- 箭头函数不支持arguments,但是可以使用剩余参数
展开运算符
- 展开运算符(…),将一个数组/对象进行展开。
- 输出结果:
应用场景
- 求数组最大值(最小值)、合并数组等
展开运算符 or 剩余参数
- 剩余参数: 函数参数使用,把多个元素收集起来生成一个真数组 (凝聚)
- 展开运算符: 将数组展开成各个元素(拆散)