js底层原理一(变量提升、函数提升)

前言:

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;


不理解的可以私信。

你可能感兴趣的:(js底层原理一(变量提升、函数提升))