Js执行机制

/* js运行时会进行三件事:1语法分析  2.预编译  3.解释执行 */
/* 1.语法分析:浏览器对Js全篇预览,判断语法是否失误 */

/* 2.预编译的四部曲:
1.创建GO/AO对象
2.找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
3.将实参值和形参统一
4.在函数体里面找函数声明,值赋予函数体 

*/
/* ------------JS中函数-------------- */
function name(a) {
        console.log(a);
        var a = 123;
        console.log(a)
        function a() { }
        console.log(a);
        var b = function () { }
        console.log(b);
}
name(1);


/* --------浏览器预编译解析机制--------- */
/* 1.创建GO/AO对象 */
AO = {}
/* 2.找形参和变量声明,将变量和形参名作为AO属性名,值为undefined */
AO = {
        a: undefined,
        b: undefined
        /* 因为形参中有a已放入AO对象,所以变量声明的a不放入AO对象 */
}
/* 3.将实参值和形参统一 */
AO = {
        a: 1,
        b: undefined
        /* 实参是1,所以形参也是1 */
}
/* 4.在函数体里面找函数声明,值赋予函数体  */
AO = {
        a: function a() { },
        b: undefined,
        /*因为函数体中有a函数,所以AO对象的a属性值发生改变 */
}
/* 到这里浏览器解析预编译结束,存储的内存AO对象如上例4 */

/* 3.解释执行 =>开始执行js中函数,函数打印如下 */
// function a() {}
// 123
// 123
// function b() {}

/*解析: 因为js从上往下执行,函数执行过程中,函数内部中第一行读取打印的a变量是AO对象中/浏览器内存中(这里已经发生了变量提升)的属性a,所以打印function a(){}的函数体,然后声明变量a对内存中属性a重新赋值,第3行打印123,14行创建的函数a已经在预编译过程中提升赋值使用,这里Js解释执行不再使用,所以第5行还是打印123,第6行声明的变量b函数体对AO对象存储重新赋值,所以第7行打印b得到function b(){}的函数体
*/


这里奉上渡一课堂成哥的视频地址:https://ke.qq.com/course/231577#term_id=100273169

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值