前言:
js是解释性语言,运行时才能解析出代码对错。
为什么可以变量函数提升?
js代码是自上而下执行,但是在js代码执行前,会先进行词法分析。在词法分析时,将变量和函数进行了提升。
js执行两个阶段:
- 1.词法分析
- 2.执行
词法分析三步骤
1、分析参数
2、再分析变量的声明
3、分析函数声明
举例
1 function fn(a){
2 var a = 1;
3 function a(){
4 console.log("a函数")
5 }
6 alert(a)
7 }
8 fn(2)
实际实现代码:
1 function fn(a){
2 var a = undefined;
3 a = 2;
4 a = function a(){
5 console.log("a函数")
6 }
7 a = 1;
8 alert(a); // 1
9 }
10 fn(2)
具体分析:
词法分析三步:
函数在运行的瞬间,生成一个活动对象(Active Object),简称AO
第一步,分析函数参数:
形式参数:AO.a = undefined
实参:AO.a = 2
第二步,变量声明:
仅做一件事,没有var a的话,就var a;
第三步,函数声明:
有函数a,AO.a = function a() {}
运行期:
将a赋值内部变量,即a=1;
不理解的可以私信。
网友评论