• 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 !!!

  • 相关阅读:
    兼容ie10及以上css3加载进度动画
    MySQL的安装
    VSFTPD+MYSQL+PAM
    58.省市联动-json
    省市联动
    56.检验特殊字符
    55.全选2
    54.截取字符串的思想实现输入框字数限制
    网络截取文件名
    lastPathComponent的功能
  • 原文地址:https://www.cnblogs.com/lyjfight/p/13328596.html
Copyright © 2020-2023  润新知