浏览器中的JavaScript是如何运行的

  • 客户端:浏览器里面的JavaScript里面包括ESMAScript和WEBAPI

  • 服务端:服务端里面的为node.js里面包括ESMAScript和NodeAPI

  • JavaScript其实就是一个称呼,其语言本身还是ESMAScript语言

JS Engine(JS引擎)


JavaScript引擎就是用来执行JS代码,通过解释器将代码解释成可执行的机器码让计算机去执行该代码实现的内容。

引擎主要包括:

  1. Heap(堆):JS引擎中给对象(引用类型)分配内存空间的放在对里

  2. Stack(栈):储存着JavaScript正在执行的任务(也就是帧),后进先出

回到顶部 目录

Context(执行上下文)


JavaScript的运行环境,比如调用一个函数的时候就会进入函数的执行上下文

JavaScript中有三种执行上下文类型:

  • 全局执行上下文:简单来说就是在js文件里面编写的代码在全局作用域下的。
  1. 创建一个全局window对象(浏览器的情况下)

  2. 设置this的值等于这个全局对象window

  3. 一个程序只会有一个全局执行上下文

  • 函数执行上下文:当一个函数被调用时,JavaScript引擎会先为该函数创建一个新的执行上下文

  • Eval函数执行上下文:在执行eval函数的时候,JavaScript引擎也会在eval内部创建一个属于它自己的执行上下文

Call Stack(调用栈)


JavaScript引擎是利用栈的结构(后进先出)来管理执行上下文的

在执行上下文创建好后,JavaScript引擎将执行上下文添加到栈里,通常把这种管理执行上下文的栈称为执行上下栈,简称调用栈

浏览器中查看调用栈的方法:

  1. 打断点

  2. console.trace()

栈的溢出:当执行上下文把栈占满了还有执行上下文没有处理就是溢出,正常情况下是不会出现的

回到顶部 目录

Event Loop(事件循环)


JavaScript在执行代码的过程中出了调用栈还有任务队列来解决一些代码

任务队列(宏任务(macro-task/task) + 微任务(micro-task/jobs))

宏任务大概包括:

  • script(整体代码)

  • setTimeout

  • setInterval

  • setlmmediate

  • I/O

  • UI rendering

微任务大概包括:

  • process.nextTick

  • Promise

  • Async/Await

  • MutauionObsetver(H5新特征)

JavaScript运行机制


JavaScript引擎调用栈,把栈里面的内容执行完以后,在到任务队列里面先执行队列的所有任务,如果没有微队列,将执行宏任务,在执行宏任务中产生的微任务,若微任务中又产生了微任务,这继续执行微任务直到执行完毕,在回到宏任务

在这里插入图片描述

async function async1(){

await async2();

console.log(‘async1 end’)

}

async function async2(){

console.log(‘async2 end’)

}

async1()

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值