前端 JavaScript运行原理

 更新时间:2021年10月23日 10:43:39   作者:onlythinking  
这篇文章主要介绍了前端 JavaScript运行原理,JavaScript引擎是一个计算机程序,它的主要作用是JavaScript运行时将源码编译为机器码。每个主流Web浏览器都有自己的JavaScript引擎,它通常由web浏览器供应商开发,接下来一起来看看文章的详细内容吧

1、什么是JavaScript引擎

JavaScript引擎是一个计算机程序,它的主要作用是JavaScript运行时将源码编译为机器码。

每个主流Web浏览器都有自己的JavaScript引擎,它通常由web浏览器供应商开发。

  • Google Chrome V8。
  • Mozilla Firefox Spider Monkey。
  • Safari Javascript Core Webkit。
  • Edge (Internet Explorer)

以前的JavaScript引擎主要在web浏览器使用,不过随着nodejs的出现就打破了这种局限。

2、V8引擎

V8包含了解析器(parser),解释器(Ignition),优化编译器(TurboFan )。

解析器(parser):用于生成抽象语法树。

解释器(Ignition):将源码转换为字节码。

优化编译器(TurboFan ):进行一些优化编译优化处理,比如内联缓存。

下面是V8引擎的大体工作流程。

  • 首先 解析器 先生成一个抽象语法树。
  • 然后 解释器 根据语法树生成V8格式的字节码。
  • 优化编译器 再将字节码编译成机器码。

3、运行时环境

浏览器运行环境中,浏览器提供了Web API如:HTTP请求,计时器,事件等。

服务器运行环境中,nodejs提供了API。

下面是JavaScript在浏览器中运行时的架构,它包含一个内存堆、一个内存栈、一个事件循环、一个回调队列。

stack
heap
call stack
callback queue
event loop

4、运行时的调用栈

下面代码展示了JavaScript执行的调用栈变化。

function add(x, y) {
    return x + y;
}

function print(x, y) {
    console.log('x+y=',add(x, y))
}

print(1, 3)

5、异步任务

JavaScript先执行了 print 函数,然后调用Web API setTimeout() Web API存储了 setTimeout() 的回调函数,3秒后将回调函数添加到回调队列,事件循环发现调用栈为空,于是将队列里的回调函数移至调用栈执行。

function add(x, y) {
    return x + y;
}

function print(x, y) {
    setTimeout(function (){
        console.log('x+y=',add(x, y))
    }, 3000)
}

print(1, 3)

6、总结

JavaScript运行主要依靠JavaScript引擎和运行环境, 引擎 将js源码翻译成计算机所理解的机器码, 运行环境 提供了一些与计算机底层通讯的API和运行实现。

到此这篇关于前端 JavaScript运行原理的文章就介绍到这了,更多相关JavaScript运行原理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JS实现一个微信录音功能过程示例详解

    JS实现一个微信录音功能过程示例详解

    这篇文章主要介绍了JS实现一个微信录音功能过程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • uniapp封装canvas组件无脑绘制保存小程序分享海报

    uniapp封装canvas组件无脑绘制保存小程序分享海报

    这篇文章主要为大家介绍了uniapp封装canvas组件和方法无脑绘制并保存小程序分享海报实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • JS前端使用Canvas快速实现手势解锁特效

    JS前端使用Canvas快速实现手势解锁特效

    这篇文章主要为大家介绍了JS前端使用Canvas快速实现手势解锁特效,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • 帮你提高开发效率的JavaScript20个技巧

    帮你提高开发效率的JavaScript20个技巧

    JavaScript确实是一门很好的开发语言。对于给定的问题,可以有不止一种方法来达到相同的解决方案。在这篇文章中,我们将讨论最快速的方法
    2021-06-06
  • 深入浅出探究JavaScript中的async与await

    深入浅出探究JavaScript中的async与await

    任意一个名称都是有意义的,先从字面意思来理解。async 是“异步”的简写,而 await 可以认为是 async wait 的简写。所以应该很好理解 async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成。下文将带你深入探究JavaScript中的async与await
    2021-09-09
  • 微信小程序 Flex布局详解

    微信小程序 Flex布局详解

    这篇文章主要介绍了微信小程序 Flex布局详解的相关资料,需要的朋友可以参考下
    2016-10-10
  • 微信小程序 解析网页内容详解及实例

    微信小程序 解析网页内容详解及实例

    这篇文章主要介绍了微信小程序 解析网页内容详解及实例的相关资料,这里使用爬虫对复杂的网页进行抓取,遇到些问题,这里整理下并解决,需要的朋友可以参考下
    2017-02-02
  • js前端图片加载异常兜底方案

    js前端图片加载异常兜底方案

    这篇文章主要为大家介绍了js前端图片加载异常兜底方案,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • JavaScript高级程序设计之变量与作用域

    JavaScript高级程序设计之变量与作用域

    这篇文章主要介绍了JavaScript高级程序设计之变量与作用域,文章主要通过描述原始值与引用值、instanceof、作用域展开具体内容,需要的朋友可以参考一下
    2021-11-11
  • 微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决

    微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决

    这篇文章主要介绍了微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决的相关资料,需要的朋友可以参考下
    2016-12-12

最新评论