程序员鸡皮
文章 分类 评论
112 3 31

站点介绍

一名PHP全栈程序员的日常......

Javascript代码的执行顺序是怎么样的?

abzzp 2026-02-05 1 0条评论 前端 前端

首页 / 正文
本站是作为记录一名北漂程序员编程学习以及日常的博客,欢迎添加微信BmzhbjzhB咨询交流......

发布于2024-07-04

我们了解了V8引擎之后,我们要了解一下Javascript代码的执行顺序,包括:AO,GO,VO。干货满满......

假如说我们现在有以下代码:

var message = "hello";
function foo(){
    var message = "foo";
    console.log(message);
}

var num1 = 10;
var num2 = 20;
var reault = num1 + num2;

foo();

那么他会是怎么执行的呢?

在我们执行任何执行上下文之前,都存在一个独一无二的全局对象global object。全局对象包含这几个属性:Math,String,parseInt,Date......。这里我们还可以说在全局变量中定义的message属于windows对象。相当于在html文档对象模型中,全局对象就是window本身。

GO是什么?

Go就是额外的宿主定义的属性,就相当于我们都属于地球。我们存在的Go就是地球,然而js也是有宿主的,他的宿主环境就是GO。英文global object说明他是一个对象。

  1. 在堆内存创建的一个全局对象,该对象所有作用域都可以访问,在浏览器中这个对象就是window
  2. 里面会有Math,String,parseInt,Date等这些方法。
  3. 其中还有一个window执向自己。

什么是执行上下文?

当程序的控制权交给EcmaScript执行代码的时候,控制权就会自动生成一个自动上下文栈。这里的顶部的执行上下文正好是当前运行的执行上下文。

Javascript内部有一个执行上下文简称ECS,他是用与执行代码的调用栈。

全局代码为了执行会创建一个GEC,GEC会被放到ECS中执行。

GEC被放到ECS中会包含两个部分:

  1. 在代码执行前,由代码通过parse转换为AST的时候,会将全局定义的变量,函数,对象等统一放入到Golbal Object中,但是并不会赋值,这就是、变量的作用域提升
  2. 在代码执行中,对变量赋值,或者执行其他函数

VO是什么?

VO是Variable Object的缩写,每一个函数上下文都会关联一个VO,其中变量和函数声明也会被添加到里面。当全局对象被执行的时候,VO就是GO了。

官方的解释

  1. 作用域链被创建和初始化只包含全局对象而不包含其他对象
  2. 变量实例是通过使用全局对象作为变量对象,并且使用其属性得来的。
  3. this的值是全局对象。
     title=

 title=

AO是什么?

当进入一个函数执行上下文时,会创建一个AO对象Actvation Object

这个AO会使用aarguments作为初始化,并且初始值是传入的参数。

这个AO对象会做为执行上下文的VO来存放变量的初始化。

ECMA文档中的介绍
当控制权进入一个函数的执行上下文时,一个成为激活对象的对象被创建,并与执行上下文关联,激活对象被初始化,拥有一个名为arguments的属性以及{DontDelete}属性。这个属性的初始是下面描述的参数对象。

激活多谢随后被用作变量实例化的变量对象。

AO执行图示

函数执行前

 title=

函数执行后
 title=

感谢大家观看

评论(0)

最新评论

  • 湖山風光

    欣赏你的照片, 我明白, 世界很美。感谢 旅行灵感。

  • 古競技場

    读起来像小说。继续保持 带来的灵感。

  • 奧運聖火

    让人精神焕发的 帖子! 我准备订票了。

  • abzzp

    以后焦虑了或者迷茫了记得回来看看[[流泪]]

  • 三十三瀑布

    我非常喜欢 出行博客。鼓舞人心查看路线。

  • 天星碼頭

    你们的博客 百分百 帮助选择路线。坚持!

  • 日落鼓掌

    信息丰富的 出行资源! 越来越棒!

  • digital banking

    My brother suggested I might like this blog. He was entirely right. This post actually made my day. You cann't imagine just how much time I had spent for this information! Thanks!

  • 碧海藍灣

    我热爱, 写得很实在。你的博客 就是 最好的例子。很出色。

  • digital banking

    I've learn several good stuff here. Certainly price bookmarking for revisiting. I surprise how so much effort you put to make such a great informative website.

日历

2026年02月

1234567
891011121314
15161718192021
22232425262728

文章目录

站点公告
本站是作为记录一名北漂程序员编程学习以及日常的博客,欢迎添加微信BmzhbjzhB咨询交流......
点击小铃铛关闭
配色方案