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

代码的执行原理

程序员文章站 2022-07-15 15:47:13
...

代码的执行原理

一、代码段

什么是代码段:一个script标签就是一个代码段。

JS代码在执行时,是一个代码段一个代码段执行。

二、代码执行的步骤

  • JS代码在执行时分两个阶段:
  • 1)预编译
  • 2)代码执行
    每一个阶段做的事情是不一样的。
先了解一下定义变量和声明变量:
    通过var定义变量:var a = 110;   定义 = 声明+赋值
    f();:使用function声明了一个函数;函数名是f  函数值是{};定义了一个函数f()
    通过var声明变量:var a = 110;  说的声明仅仅是说var a   后面是赋值

1)预编译: 提升
把加var的变量进行提升:变量声明会提升,变量的赋值是不会提升。
提升是提升到代码段最前面
把使用function声明的函数进行提升 提升的是整个函数

2)代码的执行:一行一行执行

eg:console.log(a); var a = 110; console.log(a);

  • 输出:undefiend 和 110;

执行步骤: 1)提升:因为a是var进行声明的,所以要进行提升。提升只是提升了声明并没有提升变量的值,所以现在a是undefiend。
2)执行:第一行代码得到的是a的提升值,所以是undefiend,第二行将值110赋值给了a,所以当前a为number数据类型,值为110。因此第三行代码将a的值110输出。

三、初步了解执行上下文( Execute Context)

执行上下文( Execute Context):

为了方便,以后我们统一将执行上下文简称为:EC

  • EC的作用:给代码提供数据

代码分两类:

  • 全局代码 函数外面的代码叫全局代码
  • 函数代码 一个函数就是一个局部代码
  • 全局执行上下文:
    全局代码在执行时时,就会产生全局的EC。 EC(G)
    例如:代码的执行原理
  • 局部执行上下文:
    函数代码在执行时,就会产生局部的EC。调用一个函数就产生一个EC,调用100个函数,就产生100个EC。代码的执行原理
  • EC栈:
    栈:杯子
    每产生一个EC就会放到杯子中,说白了,就是杯子中放鸡蛋。
    栈:先放进去的后出来
    代码的执行原理

执行上下文详解

我们知道,当代码执行的时候随之就产生了一个叫执行上下文的东西,也就是他使我们得到了最后的数据。
但是,执行上下文是怎么执行的呢?让我们一起探究一下吧!

我们知道,当代码进行执行的时候,必然要遵守的规则,于是他必然要经过预编译然后执行。
(何为预编译前面已经介绍,就不在讲解了。)
要用到的相关名称:ECStack:(Execute context stack):执行上下文栈
EC(G)(Execute context (globle):存放全局变量的执行上下文:包含:var 定义的全局变量,引用数据类型)
**EC(f)????*函数f执行时产生的执行上下文
GO(globle object):存放全局对象
VO(varibale object):var创建的全局变量对象和引用数据类型对象
AO:var创建的局部数据对象(如果对数据对象不熟悉,可以访问:JS中的数据类型及转换)

注意:数据在EC(G)中,就一定在GO中,反之不一定

具体步骤如下:

  • 1、在预编译的时候就产生了一个叫ECStack的大容器,他的里面放了EC(G)。EC(G)中有个VO用来存放提升的数据(提升了的变量的声明)。
  • 2、提升完毕,开始一步步执行代码。
    1)执行代码,给VO里面的变量进行赋值
    2)当调用函数的时候就会产生一个EC(f),每调用一次就产生一个EC(f),步骤:先对函数进行形参的赋值,然后看有没有提升,如果有提升,将其保存在AO中,然后进行执行,如果里面还有函数重复当前步骤。
    看几个例子了解一下吧!代码的执行原理
    代码的执行原理
    代码的执行原理