1、作用域
变量的作用范围,称为作用域。
从作用域的角度,可以将变量分为全局变量和局部变量。全局变量具有全局作用域,局部变量具有局部作用域。
- 作用域链
函数内指向函数外的链式结构,就称作作用域链。
2、预解析
JavaScript代码的执行是由浏览器中的JavaScript解析器来执行的。JavaScript解析器执行JavaScript代码的时候,分为两个过程:预解析过程和代码执行过程。
- 预解析过程:
- 把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。
- 把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用。
- 先提升var,再提升function。
- 变量提升
定义变量的时候,变量的声明会被提升到作用域的最上面,变量的赋值不会提升。 - 函数提升
JavaScript解析器首先会把当前作用域的函数声明提前到整个作用域的最前面。