首先,JavaScript中只有两种作用域:1)全局作用域 2)局部作用域(函数作用域)
顾名思义,全局作用域即变量全局可用,当然全局作用域也有局部性,即在当前网页和脚本可用,不再展开。
局部作用域即变量在函数内部定义,也只能在当前函数中使用,函数执行完成,变量销毁。
1、变量提升
在JavaScript中,代码执行分两步,1解析,2执行.第一步解析器会全局检索function、var、参数,并将此提升到当前作用域的最顶部,即变量无论在哪个作用域定义,都会被提升到顶部,但赋值操作不会变,提前调用未声明的变量时会显示undefined。
2、函数提升
函数声明式:函数提升时会将函数的声明和定义一起提升上去。
函数表达式
1:所有的声明都会提升到作用域的最顶上去。
2:同一个变量只会声明一次,其他的会被忽略掉。
3:函数声明的优先级高于变量申明的优先级,并且函数声明和函数定义的部分一起被提升。