一、预解析
JavaScript引擎在对JavaScript代码进行执行之前,会对JavaScript代码进行预解析,在预解析阶段,会将以关键字var和function开头的语句块提前进行处理。
1、函数的声明
2、函数表达式不会提升
3、变量的提升 变量名提升 赋值没有提升
4、变量名和函数名相同情况 函数会提升,变量不会
5、提升不会超出作用域的范围
二、作用域
一、全局作用域:
定义:直接编写在script脚本标签里面的代码,或者单独的js文件
生命周期:页面创建时候产生,页面关闭时候销毁
定义在全局的变量,在任何作用域都有效,会放到window对象下面,作为一个属性。
二、局部作用域
定义:只有函数才会产生局部作用域
生命周期:函数声明时产生,函数调用后销毁
定义在局部的变量,只在当前作用域有效
三、隐式全局变量:
1、不用var 关键字声明的变量
2、用var声明,且用 ; 隔开的也是全局变量
3、用var声明,且用 = 连接的也是全局变量
四、作用域链的查找规则
先从当前作用域查找,有就返回,没有就向上一级作用域查找,依次往上,直到全局作用域,如果全局没有就报错。