zoukankan      html  css  js  c++  java
  • JS预编译

    JS预编译

    js运行三部曲

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

    ** 预编译 **

    1. 预编译发生在函数执行前的一刻。
    2. 简单现象:函数声明整体提升, 变量 声明提升(定义赋值不提升)

    ** 预编译过程(四部曲):**
    1.创建AO对象(Activated 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);
    //解析
    一、预编译过程:
    1.创建AO对象,找形参和变量声明,将变量和形参名作为AO属性名,值设置为undefined。
    AO{
    	a:undefined,
    	b:undefined,
    }
    2.形参和实参统一
    AO{
    	a:1,
    	b:undefined,
    }
    3.找函数声明,值赋予函数体
    AO{
    	a:function a(){},
    	b:undefined,
    	d:function d(){};
    }
    二、执行过程
    1.第一个console.log(a):function a(){},
    2.赋值a = 123;
    3.第二和第三个console.log(a):123,
    4.声明并赋值b后
    AO{
    	a:123,
    	b:function (){},
    	d:function d(){};
    }
    console.log(b):function (){}
    
    //对于全局对象也是与上面函数预编译过程差不多
    对于全局创建的是GO对象(global object)
    

    ** PS: **
    1) imply global:没有声明就直接赋值的变量属于全局对象所有。
    a = 12; //window.a = 12
    2) 一切声明的全局变量全是window的属性。
    window就是全局的域。

  • 相关阅读:
    测试用例设计方法
    软件测试--常考的证书
    fillder-----接口延时返回(新方法)
    测试工作之--adb代码
    设计测试用例的常用方法
    TFS2013 设置签出独占锁
    Sql Server (MSSQLSERVER) 服务无法启动
    Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介
    C#使用redis学习笔记
    C#使用mybatis学习笔记
  • 原文地址:https://www.cnblogs.com/1549983239yifeng/p/14431230.html
Copyright © 2011-2022 走看看