js 预编译

解释型语言

//console.log(a);// 语言分析 :a is not define
console.log(d);//function d(){} d:undefined —> f d(){}
var b = 0;
var c = 0;
var d =0;
function d(){
var d = ‘’;
console.log(d);
}

    console.log(d);//0          d:undefined ---> f d(){} --->0
     /*
        1.语言分析
            将js所有【需要执行】的代码全面检测一遍,目的排除低级的 语法错误,检测到错误后,一个一个抛出错误,而不是一下子全部抛出
        2.预编译  函数声明提升,变量提升
            代码执行之前发生的
            2.1 创建一个AO变量
            2.2 将函数体中所有声明的变量和形参提升到作用域最顶端,并且赋值为 undefined
            2.3 将形参与实参进行统一
            2.4 在函数体中 找【函数声明】,赋值为函数本体
            2.5 若函数名与变量名字重复,那么变量赋值会覆盖函数本体
            
        3.解析执行代码执行完毕
            单一的函数:函数内部:变量会销毁
     */

预编译GO

// 语法分析:代码没执行 找到语法错误 -----???
// 预编译-GO 代码没执行
// 1: new go --> go{}
// 2: 分析变量 go{b:un,c:un,d:un};
// 3: 分析函数 go{b:un,c:un,d:f d(){}} // d 值由 undefinede —>function d(){}
// 解析执行,每执行一行 变量进行赋值
/**
* go{b:0,c:un,d:f d(){}} // b un -->0
* go{b:0,c:0,d:f d(){}} // c un —> 0
* go{b:0,c:0,d:2} d 由 fun —> 2
* **/
// console.log(a); //语言分析; a is not define
console.log(d); // functon d(){} d: undefine–>function d()
// go{b:0,c:un,d:f d(){}} // b un -->0
var b = 0;
// go{b:0,c:0,d:f d(){}} // c un —> 0
var C = 0;
function d() {
d = “你好”;
console.log(d);
}
// go{b:0,c:0,d:function d (){}}
window.d();
// go{b:0,c:0,d:2} d 由 fun —> 2
var d = 2;
d();//d is not a function
// ??? //被 语言分析检测到

预编译AO

// 函数执行浏览器解析js过程
// 1.创建AO对象 AO{}
// 2.分析函数体中 形参和var的变量
// —>AO{x:undefined,y:undefined,a:undefined,b:undefined}
// 3.形参和实参统一:AO{x:1,y:2,a:undefined,b:undefined}
// 4.分析函数体中函数:AO{x:1,y:2,a:undefined,b:undefined,c:fun c(){}}

    // 解析执行
    function fun(x,y){
        // AO{x:1,y:2,a:0,b:undefined,c:fun c(){}}   //a由 undefined--->0
        var a = 0;
        // AO{x:1,y:2,a:0,b:0,c:fun c(){}}   //b由 undefined--->0
        var b = 0;
        function c(){}
    }
    // 函数执行完毕,AO消失了,变量销毁了
    fun(1,2);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值