变量提升
什么是变量提升?
变量提升是JS中比较[奇怪]的现象,它允许在变量声明之前既被访问(仅存在于var声明变量)变量提升:将变量的声明提升到当前作用域的最前面+变量赋值
总结:
1.变量在var声明之前既被访问,变量的值为undefined
2.let/const声明的变量不存在变量提升
3.实际开发中推荐先声明再访问变量。
JS初学者经常花很多时间才能习惯变量提升,还经常出现一些意想不到的bug,正因为如此,ES6引入了块级作用域,用let或者const声明变量,让代码写法更加规范和人性化。
什么是函数提升
函数提升与变量提升比较类似,是值函数在声明之前即可被调用。函数提升:是将函数的声明提升到当前作用域的最前面
示例代码:
总结:
1.函数提升能够使函数的声明调用更灵活
2.函数表达式不存在提升的现象
3.实际开发中推荐定义函数再调用函数
函数参数-动态参数
动态参数:arguments是函数内部内置的伪数组变量,它包含了调用函数时传入的所有实参判断是否是数组:Array.isArray(数组) true 表示就是数组 、false 表示就不是数组
总结:
1.arguments 是一个伪数组,只存在于函数
2.arguments 的作用是动态获取函数的实参
3.可以通过for循环一次得到传递过来的实参。
函数剩余-剩余参数
如果函数的实参比形参多,如何取多余的实参呢?比如:
可以使用 剩余参数 解决上面的问题
剩余参数:允许我们将一个不定数量的参数表示为一个数组。 简单来讲:剩余参数可以获取剩余的实参,得到的是一个数组。
基本语法
...是剩余语法符号,放置于形参列表的最后面,用于获取多余的实参
剩余参数获取的是真数组,动态参数获取的伪数组
开展运算符
如何快速求数组的最大值和最小值?可以遍历数组,依次比较。
有没有其他方法?可以展开运算符
什么是展开运算符:展开运算符...将一个数组展开
基本语法
典型运用场景:求数组最大值(最小值)、合并数组
使用展开运算符求数组最大值(最小值)
合并数组
开展运算符与剩余参数的区别
1.展开运算符主要是 数组展开2.剩余参数主要是在函数中使用
3.展开运算符变量名不能任意,剩余参数变量名可以任意。