代码的执行原理

代码的执行原理

一、代码段

什么是代码段:一个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中,然后进行执行,如果里面还有函数重复当前步骤。
    看几个例子了解一下吧!在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值