欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

前端 JavaScript运行原理

程序员文章站 2022-03-06 23:16:30
目录1、什么是javascript引擎2、v8引擎3、运行时环境4、运行时的调用栈5、异步任务6、总结1、什么是javascript引擎javascript引擎是一个计算机程序,它的主要作用是java...

1、什么是javascript引擎

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

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

前端 JavaScript运行原理

  • google chrome v8。
  • mozilla firefox spider monkey。
  • safari javascript core webkit。
  • edge (internet explorer)

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

2、v8引擎

v8包含了解析器(parser),解释器(ignition),优化编译器(turbofan )。

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

前端 JavaScript运行原理

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

前端 JavaScript运行原理

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

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

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

前端 JavaScript运行原理

3、运行时环境

浏览器运行环境中,浏览器提供了web api如:http请求,计时器,事件等。

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

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

前端 JavaScript运行原理

stack
heap
call stack
callback queue
event loop

4、运行时的调用栈

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

前端 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秒后将回调函数添加到回调队列,事件循环发现调用栈为空,于是将队列里的回调函数移至调用栈执行。

前端 JavaScript运行原理

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运行原理内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!