js预编译 个人理解

走远了吗. 提交于 2019-11-26 19:23:14

什么是预编译呢

在函数(JS)执行的前一刻,会创建一个叫做执行期上下文的(AO)对象这个创建执行期上下文的过程叫做预编译

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

在初期我们知道 这只是比较浅的
函数声明整体提升 会把函数声明提到最上边
变量 声明提升 但是赋值没有被提升

预编译的过程(四部曲)
1、创建AO对象
创建AO对象(Activation Object){
执行期上下文
}
2、找形参和变量声明 将变量和形参作为AO属性名 值为undefined
AO{
这是第二步
a:undefined, 因为变量名和形参名一样 所以只写一个就好
b:undefined,
第三步
接下来将参数传进去 将实参值和形参统一
a:1,
b:undefined
第四步 在函数体里面找函数声明 值赋予函数体
a:function a(){},
b:undefined,
d:function d(){},
}
3、将实参值和形参统一
4、在函数体里面找函数声明 值赋予函数体
全局的预编译和函数内的一样
只是全局生成了一个GO对象

 <script>
    function fn(a){
        console.log(a);  //ƒ a(){}
        // 这个打印的是 函数声明

        var a = 123;

        console.log(a);  //123
        // 这个打印的是变量a
         
        function a(){}

        console.log(a);   //   123
        // 这个打印的是变量a

        var b = function (){}

        console.log(b);  //function(){}
        // 这个打印的是 函数声明b
        
        function d(){}
        
    }
    fn(1)
    // 预编译发生在函数执行的前一刻

    </script>

解题步骤在上面

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!