JS之引擎执行过程

本文详细介绍了JavaScript的执行过程,包括单线程、异步执行、语法分析、预编译阶段以及执行阶段。在预编译阶段,会创建执行上下文并确定`this`指向。执行阶段涉及宏任务和微任务,事件循环依次处理这两个任务队列,确保代码的有序执行。文中还探讨了使用setTimeout模拟setInterval的差异,强调了性能和执行顺序的重要性。
摘要由CSDN通过智能技术生成

基础

        js是单线程语言。浏览器端JS是以单线程方式运行的,依赖于类型谷歌的v8引擎等各种js引擎,js又是解释型语言,不需要像Java那样先编译后执行。,js与UI渲染占用一个主线程。当然,通过webwork可以开启多线程。

        js是异步执行的。js的快速解析速度得益于异步执行。js与UI渲染占用同一个主线程,这时如果js进行高负载的数据处理容易造成阻塞,造成浏览器卡顿。js提供了异步操作,像定时器(setTimeout、serInterval)、ajax请求、I/O回调等。通过事件循环实现

js的执行过程

    大致分为三个步骤:

        1.语法分析

        2.预编译阶段

        3.解释执行阶段

    浏览器按顺序加载由<script>分割的代码块,加载第一个代码块后按以上顺序执行,之后再按顺序加载下一个代码块。

    通过词法分析->语法分析->语法树->预编译->开始解释执行。更多详情

1语法分析

        js脚本加载完代码块后,首先进行语法分析阶段。

        在这一过程中主要分析语法等是否正确,如果错误抛出语法错误,停止这一代码块的执行,开始执行下一代码块;如果正确,进入下一阶段

2预编译阶段

    进入这一过程之前,先了解一下js运行环境,js运行环境有三种:

        1.全局环境(window)

        2.函数环境,每一个函数就是一个作用域

        3.eval

编译时每碰到一个运行环境就会创建一个执行上下文,推到栈内,形成函数执行栈。也就是说,每个函数有自己的执行环境。根据作用域链的规则,会优先在自己的作用域链找变量,然后去外层环境,因为js存在变量提升,所以会发生异常的输出

因为预编译就发生在执行前,所以在创建执行上下文的时候会确定this指向。this指向的确立取决于当前的执行环境。

因为js的这一预编译过程,涉及到js的一些特性,比如执行上下文的问题,变量的声明提前,闭包,this指向的问题,静态作用域链是什么等。https://github.com/mqyqingfeng/Blog 这里对这些概念解释的比较清楚

预编译之前:

  1. 页面产生便创建了GO全局对象(Global Object&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值