JS 变量提升

90 阅读2分钟

变量提升

什么是变量提升?

变量提升是JS中比较[奇怪]的现象,它允许在变量声明之前既被访问(仅存在于var声明变量)
变量提升:将变量的声明提升到当前作用域的最前面+变量赋值
总结:
1.变量在var声明之前既被访问,变量的值为undefined
2.let/const声明的变量不存在变量提升
3.实际开发中推荐先声明再访问变量。
JS初学者经常花很多时间才能习惯变量提升,还经常出现一些意想不到的bug,正因为如此,ES6引入了块级作用域,用let或者const声明变量,让代码写法更加规范和人性化。

什么是函数提升

函数提升与变量提升比较类似,是值函数在声明之前即可被调用。
函数提升:是将函数的声明提升到当前作用域的最前面
示例代码:

image.png
总结:
1.函数提升能够使函数的声明调用更灵活
2.函数表达式不存在提升的现象
3.实际开发中推荐定义函数再调用函数

函数参数-动态参数

动态参数:arguments是函数内部内置的伪数组变量,它包含了调用函数时传入的所有实参

判断是否是数组:Array.isArray(数组) true 表示就是数组 、false 表示就不是数组

image.png 总结:
1.arguments 是一个伪数组,只存在于函数
2.arguments 的作用是动态获取函数的实参
3.可以通过for循环一次得到传递过来的实参。

函数剩余-剩余参数

如果函数的实参比形参多,如何取多余的实参呢?
比如:

image.png
可以使用 剩余参数 解决上面的问题
剩余参数:允许我们将一个不定数量的参数表示为一个数组。 简单来讲:剩余参数可以获取剩余的实参,得到的是一个数组。

基本语法

image.png
...是剩余语法符号,放置于形参列表的最后面,用于获取多余的实参
剩余参数获取的是真数组,动态参数获取的伪数组

开展运算符

如何快速求数组的最大值和最小值?
可以遍历数组,依次比较。
有没有其他方法?可以展开运算符
什么是展开运算符:展开运算符...将一个数组展开

基本语法

image.png
典型运用场景:求数组最大值(最小值)、合并数组 使用展开运算符求数组最大值(最小值)

image.png
合并数组

image.png

开展运算符与剩余参数的区别

1.展开运算符主要是 数组展开
2.剩余参数主要是在函数中使用
3.展开运算符变量名不能任意,剩余参数变量名可以任意。