js函数预编译的理解

先说一下函数执行过程

js执行分三步:1、语法分析,2、预编译,3、解释执行。

函数的预编译发生在函数执行前一刻,预编译时函数声明整体提升,变量声明提升。

 

预编译主要有四个步骤

 一:预编译发生在函数执行的前一刻

 1.创建 A0对象(执行期上下文)

 2.找形参和变量声明,将变量声明和形参名作为AO属性名,值为undedined

 3.将实参值和形参统一

 4.在函数体里面找到函数声明,值赋予函数体

 二:执行

 5.从上往下执行语句(预编译已经看过就不用再看了) 变量声明提升 函数声明整体提升

 function fn(a) {
        console.log(a); //ƒ a() {}
        var a = 123;
        console.log(a); //123
        function a() {}
        console.log(a); //123
        var b = function () {};
        console.log(b); //ƒ () {}
        function d() {}
        console.log(d); //ƒ d() {}
    }

    //2. var AO={
    //     a:undedined,
    //     b:undedined
    // }

    //3.  var AO={
    //     a:1,
    //     b:undedined
    // }

    //4.  var AO={
    //     a:function a() {},
    //     b:undedined,
    //     d:function d() {}
    // }


    //5从上往下执行.  var AO={
    //     a:function a() {}----123,
    //     b:undedined----function () {},
    //     d:function d() {}
    // }

    fn(1)
    

 

全局预编译

<script>
    // 全局预编译
    // 1、GO
    // 2.查找函数体,赋值
    var GO = {
        hah: function hah(hah) {},
        hhh: undefined
    }

    console.log(hah) //function hah(hah) {....l.}
    console.log(hhh) //undefined 

    var hhh = 10;

    function hah(hah) {
        console.log(hah); //function hah() {}
        console.log(hhh); //undefined 
        var hah = 234;
        var hhh = 11;
        console.log(hah) //234
        console.log(hhh); //11

        function hah() {}
        console.log(hah) //234
    }

    // 生成AO(ao里面有从ao拿,没有从go拿)
    var AO = {
        hah: function hah() {},
        hhh: undefined
    }

    hah(1);
    var hah = 123;

    console.log(hah) //123
    console.log(hhh) //10
</script>

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值