函数提升、参数 || 展开运算符(...)

180 阅读2分钟

函数提升

  • 函数提升与变量提升比较类似。

说明:

  1. 函数提升提升到当前作用域最前面
  2. 函数提升只提升声明,不提升调用
  3. 函数表达式不存在提升的现象
  4. 函数提升能够使函数的声明调用更灵活

function声明的函数

image.png

函数表达式

  • image.png
  • 报错
  • image.png

var 声明函数表达式

  • 所有var声明的变量会在执行之前,提升到当前作用域的最前面
  • var声明的变量,如果不赋值,默认为undefined
  • image.png

函数参数

1.arguments对象

  1. 除箭头函数外,所有函数都内置了(默认的,自带的)一个arguments 对象.
  2. 它是一个伪数组,(有length;有索引,但是没有数组的方法)存储了函数传过来的所有实参.
  3. arguments对象只存在于函数中

示例:

  • image.png
  • 输出结果:
  • image.png

2.剩余参数rest

  • 语法: (...变量名) 变量名是我们自己定义的
  1. 剩余参数是一个真数组,存了剩余的实参
  2. 只能放到参数的最后一位
  3. 剩余参数: 用于获取多余的实参,并形成一个真数组
  4. 可以解决形参和实参个数不匹配的问题

示例1:

  • image.png
  • 输出结果:
  • image.png

示例2:

  • 多个参数情况
  • image.png
  • 输出结果:
  • image.png

剩余参数和arguments区别

  1. ... 是语法符号,置于最末函数形参之前,用于获取多余的实参
  2. 借助 ... 获取的剩余实参,是个真数组
  3. 箭头函数不支持arguments,但是可以使用剩余参数

展开运算符

  • 展开运算符(…),将一个数组/对象进行展开。
  • image.png
  • 输出结果:
  • image.png

应用场景

  • 求数组最大值(最小值)、合并数组等
  • image.png
  • image.png

展开运算符 or 剩余参数

  • 剩余参数: 函数参数使用,把多个元素收集起来生成一个真数组 (凝聚)
  • 展开运算符: 将数组展开成各个元素(拆散)