作用域简单来说就是变量生效的范围,可以分为:全局作用域、函数作用域、块级作用域
全局作用域
声明在全局作用域的变量,全局范围内都可以读写
函数作用域
函数内部的变量具有函数作用域,只可以在函数内部进行读写
块级作用域
ES6新规定的let和const声明的变量具有块级作用域,因此其存在暂时性死区,不存在变量提升
作用域链
当需要访问一个变量时,会现在自身的作用域内查找,如果找不到,会逐级向上进行查找,最高找到全局作用域,形成作用域链
变量提升
JS代码的预解析阶段会发生变量提升,会将var和function提升至最前端,并且function的优先级高于var