js解析引擎执行js代码的步骤

本文介绍了JS解析引擎执行JS代码的步骤,包括语法分析和代码处理。在语法分析阶段,引擎检查代码是否存在语法错误。在代码处理的预编译阶段,全局执行代码会创建全局对象并提升变量和函数声明。在函数内部,会创建活动对象,处理变量和参数。函数执行完毕后,函数作用域被销毁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

浏览器包括渲染引擎解析引擎,解析引擎主要负责解析js代码

一、语法分析

js解析引擎首先会先扫描所有的代码,查看代码是否存在语法错误,如果代码存在语法错误,程序立即报错,不会继续执行;如果未发现语法错误,则进入代码正式处理中的预解析(预编译)阶段

二、代码正式处理

1、预编译阶段

全局执行代码:

①、创建全局对象GO,建立一个存放全局变量的仓库;

②、找到变量申明,提升变量申明,将变量存储在全局仓库中;

③、找到函数申明,提升函数申明;

js是单线程的语句,会解释一行执行一行,执行到函数时进入函数体,将控制权交给函数体;

函数内部代码:

①、创建AO对象

②、找到变量声明形参,赋值为默认值undefined

③、将实参的值赋值给形参

④、找到函数声明,然后提升函数声明

代码实例:

<script>
        function fn(num){
            //首先创建AO,将变量声明和形参,赋值为默认值undefined;
            // AO{
            //     num:undefined;
            //     num2:undefined;
            // }
            //然后将实参的值赋值给形参
            // AO{
            //     num:5
            //     num2:undefined;
            // }
            //找到函数申明,提升函数申明
            // AO{
            //     num:function num(){}
            //     num2:function(){console.log(1)}
            // }
            console.log(num); //function num(){}
            var num = 10;
            console.log(num); //10
            function num(){} //函数申明,第三步提升
            console.log(num);  //10

            console.log(num2); //function(){console.log(1)}
            var num2 = function(){ //只有var num2;被提升,而且会被后面的函数申明覆盖 
                console.log(2)
            }
            console.log(num2); //function(){console.log(2)}

            function num2(){ //函数申明,第三步提升(会覆盖掉前面的变量申明(num2)提升)
                console.log(1)
            }
        }
        fn(5);
</script>

函数执行完毕之后,函数会被销毁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值