• JS之预编译(详解)


    JS运动过程:

    1. 语法分析
    2. 预编译
    3. 解释执行

    语法分析就是JS引擎去检查你的代码是否有语法错误,解释执行顾名思义就是执行你的代码。当然最重要的还是预编译,那么预编译是在什么时候开始发生呢?,接下来就是重点了。

    首先要明白什么是函数声明?,什么是变量赋值?

    function a() //函数声明
    var a = function (){}//变量赋值(函数表达式)

    预编译(函数执行的前一刻):

    1. 创建AO对象(Activation Object)(执行上下文);

    2. 找函数形参和函数内变量声明,将形参名和变量名作为AO对象的属性名,值为undefined;

    3. 将实参值和形参统一,实参值赋给形参;

    4. 在函数体里面找函数声明,值赋予函数体。

    请看下面这个例子:
    function fn(a){
     	console.log(a);
     	var a = 123;
     	console.log(a);
     	function a() {} //函数声明
     	console.log(a);
     	var b = function(){}//变量赋值(函数表达式)
     	console.log(b);
     	function d(){}//函数声明
     }
     fn(1);

    输出结果:

    在这里插入图片描述
    解题步骤:

    第一步:声明一个AO对象(Activation Object)(执行上下文),执行上下文就是由于这个函数执行产生的一个存储空间库;

    AO{
    
    }

    第二步: 找函数形参和函数内变量声明,将形参名和变量名作为AO对象的属性名,值为undefined;

    AO{
    	a:undefined,   //形参a
    	b:undefined  //变量b
    }

    第三步:将实参值和形参值统一(也就是说把实参值传到形参中)

    AO{
    	a:1,//形参a
    	b:undefined //变量b
    }

    第四步:在函数体里面找函数声明,值赋予函数体

    AO{
     	a:function a(){}, //函数体
     	b:undefined, //变量b
     	d:function b(){} //函数体
     }

    接下来就是函数执行,函数执行要按照顺序来,也就是一行一行的执行。

  • 相关阅读:
    源码探索笔记:ArrayList和LinkedList的源码
    Java多线程学习总结:初窥门径
    设计模式学习总结:责任链模式
    踩坑日记:行之Blog微信小程序开发过程中碰到的问题及处理方案(持续更新...)
    初识设计模式之模板方法模式
    初识设计模式之装饰者模式
    初识设计模式之建造者模式
    初识设计模式之适配器模式
    初始设计模式之原型模式
    初识设计模式之单例模式
  • 原文地址:https://www.cnblogs.com/oito/p/12149520.html
Copyright © 2020-2023  润新知