作用域
全局作用域:在javaScript中,函数外部的所有作用范围都称为全局作用域
全局变量:在全局作用域中定义的变量,叫全局变量
全局变量特点:在全局作用域中的全局变量可以在任何地方被访问到
上代码:
<script>
let a = 123 //变量a是一个全局变量
function fn() {} //函数fn是一个全局变量
let ary = []
</script>
局部作用域(函数作用域)
局部作用域: 在函数内部形成的作用范围称为局部作用域或者函数作用域
局部变量: 在局部作用域中定义的变量称为局部变量
局部变量特点: 局部变量只能在当前作用域中被访问
块级作用域
块级作用域: 在javaScript中,通过let关键字/const关键字 定义变量且位于{}中,就会形成块级作用域
块级作用域特点: 变量只能在当前块级作用域中被访问
{
let a = 123; console.log(a)
}
if(true) {
let userName = 'hhh'
}
作用域链
作用域链: 在javaScript中,多个作用域嵌套形成的一个链状结构
作用域链作用: 通过作用域链进行变量查找
闭包
闭包: 闭包就是能够读取其他函数内部变量的函数
闭包作用: 可以延长变量的使用生命周期
闭包总结:
闭包本质上就是一个函数
闭包函数就是在一个函数中访问另外一个函数中的变量
闭包函数的作用延长了变量的使用生命周期
const关键字
const关键字注意事项:
const定义常量时候必须设置初始值
const定义常量后,常量的值不能被修改
const定义常量名不能重复
const可以产生块级作用域
变量,函数提升
变量提升: 使用var关键字定义变量的时候,程序会先将变量的声明提升到当前作用域的开始,不包括赋值 函数提升: 定义函数的时候,程序会将函数的声明提升到当前作用域的开始位置,不包括函数的调用 let不存在变量提升
函数中arguments
arguments是函数中用来保存实参信息的一个数组
当函数中实参个数不确定的时候,可以通过arguments获取实参信息
函数中剩余参数
语法: ...自定义参数名
作用: 用来获取多余的实参值 (类似于arguments)
注意事项:
1 剩余参数必须写到函数形参的最后
2 剩余参数的名字是自定义的
3 剩余参数保存的值是以数组形式保存的
箭头函数(ES6语法)
箭头函数语法1: () => {} 等价于 function() {}
如果只有且只有一个参数,可以省略()
如果函数体只有一行代码,可以省略{}
如果函数只有一行代码,返回值return 可以省略
箭头函数中不能使用arguments,只能使用剩余参数
箭头函数中没有自己的this,this是父级作用域中的this