• 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(){} //函数体
     }

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

  • 相关阅读:
    CentOS yum 源的配置与使用
    CentOS 添加常用 yum 源
    给centOs添加epel源
    centos 推荐使用epel源
    如何在CentOS 5/6上安装EPEL 源
    为centos添加第三方源
    Linux远程桌面工具 -- NoMachine
    Redis windows版本的启停bat脚本命令
    Elasticsearch+Hbase实现海量数据秒回查询
    mysql 与elasticsearch实时同步常用插件及优缺点对比(ES与关系型数据库同步)
  • 原文地址:https://www.cnblogs.com/oito/p/12149520.html
Copyright © 2020-2023  润新知