zoukankan      html  css  js  c++  java
  • javascript预编译详解

    javascript运行代码总结下来就是三步

    1.分析代码
    2.预编译
    3.执行语句

    分析代码就是对代码排查一些错误

    预编译就是在执行代码前对变量,函数等申明

    执行语句就是字面意思

    那函数预编译执行的过程又是怎么的呢

    先看代码

    function fn(a) {
        console.log(a)  // function a() {}
        var a = 123
        console.log(a)  // 123
        function a() {}
        console.log(a)  // 123
        var b = function () {}
        console.log(b)  // function () {}
    }
    fn(1)

    函数fn未执行前fn函数内会创建一个AO对象,先对形参和变量申明提升, 之后对形参和实参进行统一(此时a为1),最后函数申明提升(此时a为function(){})

    所以执行后,第一个console.log中a是function a(){},第二个console.log中a被赋值了,所以是123,第三个console.log中,因为function a(){}这个一开始是申明提升,所以不会执行,所以a还是为123,最后console.log中b自然是function(){}

    总结下来 对函数的预编译就是

    1.创建AO对象 Activation Object
    2.找到形参和变量申请提升,为undefined
    3.实参和形参统一数据
    4.函数申明提升

    过程详解如下:

    1.AO {
       }
    2.AO {
            a: undefined,
            b: undefined
       }
    3.AO {
            a: 1,
            b: undefined    
       }
    4.AO {
            a: function a() {},
            b: undefined
    }
    5.AO {
            a: 123,
            b: undefined
       }
    6.AO {
            a: 123,
            b: function () {}
       }
                           

    还有一个除了AO, 还有就是GO对象是全局预编译,它是优先于AO对象所创建和执行的,过程和AO对象一样

    end !!!

  • 相关阅读:
    python学习笔记二--列表
    python学习笔记一--字符串
    写点什么呢
    nagios&pnp4nagios--yum 安装
    敏捷开发的思路
    Foreman--管理PuppetClient
    url编码解码的问题(urlencode/quote)
    json数据的处理和转化(loads/load/dump/dumps)
    http和https的区别
    python中requests的用法总结
  • 原文地址:https://www.cnblogs.com/lyjfight/p/13328596.html
Copyright © 2011-2022 走看看