00:01
啊叫什么呢,执行上下文站啊,这个呢有一个。应该有一行有有一些有一些代码,我把这个代码呢给他,我把这个代码给他搬过来啊。真的。大家先看一下这个代码。啊,来看一下这个代表它是一个什么样的意思,首先过了一个A等于十啊,啊,接着呢,过了一个八的一个方案,实际上就定义了一个函数是吧?定函数接收一个行参,接着过了一个B等于五,去调用下面的这一个函数。人说,老师这不出问题吗?啊,下面的函数是不是也很简单,我就不读了,最后调用这个吧,你说会不会有问题哦。你看有同学可能就要说了,这你执行这个负的时候,这个负在下面的,而且它不是写在右边的,它是写在左边的,有没有问题。
01:05
没问题,为什么没问题?因为当我这条语句执行的时候,这个定义有没有执行。这一条这个这个框,这个定义有没有执行,这条语句有没有执行,这是条语句。这条语句执行并不代表函数执行语句,这是不是要语句赋值语句我复值语句执行代表我的函数执行吗?不代表吧?是不是好,下面包括我这个,也是我这条赋值语句执行代表我的函数执行吗?也不代表。我只是是不是定义了两个函数,我定义了两个函数以后,接着后面是不是调用这个八函数,调用八函数内部是是调用for函数,调用for的时候,For存不存在,当然存在了。
02:03
因为这个定义是先执行的呀,对不对,是不是先定义好了两个函数再去执行的。我是故意的这么写的一个先后顺序啊,大家应该能看懂,要。那这个地方再说一个什么事情呢?啊,这个图我一会我们看一下这个图。大家看到上面有一个结构,其实还是刚才那个代码。也就什么意思,我们现在要讲的一个东西叫执行上下文站。大家看到啊,在我们整个执行过程中,是会产生很多上下文对象,执行上下文对象。那我问大家看看这个里面产生过几个执行上下文对象,一共。几个?
03:00
啊,三个哪三个,第一个是谁,是不是window开始有一个嘛,全局执行三文肯定有一个嘛,还有谁还有哪里看呢,哪里产生,导致产生了新的执行上行文多少行。17行,17行就产生了一个执行三行文对象啊。我们刚刚说执行上元力量什么时候产生函数的执行上用力啊函数。什么时候产生去了?刚才我还问你们,我说把这个重了,会不会产生质极酸角,那不得了吗?那你说什么时候产生了,调用的时候才产生了,定义的时候产生了吗?没有,那没有,现在我们这里面除了第一个window以外,还有谁谁导致产生了多号是二十五行啊。
04:05
对不对。那接着呢,19行。还有吗?还有没有?23吗?23号。哪了?你说这个啊,咱不管这个,咱就管我们这些啊,OK,好,来看这里啊。这个这个咱不管啊,这个要管的话没法没法整。我们现在是不是啊,就调用了两次函数,说白了很简单,调用一次函数。产生一个什么,是不是执行函数的执行上文的执行上角文对不对,那也就是说我们应该是N加一。一是谁谁window也是这个全局的。
05:05
对不对,那N是什么?是不是调用函数的次数?好啪。请问一共产生几个?几个?到底几个?四个五个到底四百五五就是五个啊,你想嘛,你这个把是不是导致于做就会调用啊,你又一次把是不是又导致于做调用。是不是这就四个了,我们不说N加一吗?对不对对。好,先知道有几个啊啊,我把这个注意一下,下面我们来看一下它的一个过程,这个地方是有一段过程的。
06:05
也就是说产生了这么多的对象啊,出来了,那我们得用一个结构来管理他们。我们得管理他们,其实要管理起来,那怎么样管理起来呢?啊,这个地方它是用一个什么呢?用一个站的结构来去做一个管理的操作。来大家看一下,首先第一步在全局代码执行前,JS引擎就会创建一个站来存储管理所有的执行上级文站是什么结构?站的特点是什么?还记得吧,大家知道吗?听说过吗?不知道有没有讲过,我也不太不太清楚有没有讲过跟站那有个队列。对列大家应该没,即使没讲过,你就知道它有什么特点。对吧,队列就是说白了就是有一种特别的容器,排队的容器,你从这边进去是吧,OK,在这里。
07:09
是不是排在第一位啊,排在第二位,排在第三位,排在第四位,排在第五位对不对,这从这这边进来了吧,那出去了。出去从这边出去吗?不是从哪边出去,从这边出去,他一个什么特点,先进什么先出。排队嘛。这是个容器啊,这是一种容器好占,这种容器它有什么特点呢?啊,它有这样一个重点,就是譬如说我们要有一个容,有一个有一个箱子放东西,放东西的时候是不是先放得下,这么放。这么放这么放对吧,那拿的时候呢。是不是从上面拿,也就是说我的入口和出口是什么。是不是一个同一个入口出口外,呃,如果我是队列的。
08:06
是不同的出口,一个进进口出口是不一样的,你进来是一边,出来是不是另外一边,说白了这个上面叫先进先出。那么能理解啊,那这一个叫什么呢。先进后出是吧?啊,尽量不要这么描述,应该什么呢?后进先出这有区别吗?有一定的区别,主要是看你的操作,你操作后面进来的先什么出去。那时候我我描述先进后出也没什么太大问题啊,你说有什么问题了也不至于。对吧,但是你没有直接描述我们这个操作。能看出来吗?我先出去的,我先说是不是后面进来的,我是不是拿拿后面后进来的才能拿出去。
09:03
能不能理解?啊,能理解那。他现在呢,就创建了一个站的结构来去管理啊,这个里面所有产生的。执行上下文对象首先一上来创建这个容器,里面是一个谁?主容器里面最先是谁window啊,不全局吗?好,接着哪里会产生?上下文对价执行上下文对价。是不是这个把调用啊。能不能看懂,那此时是不是又要创建一个直行三角环定向放在这个容器里面,能不能看懂?能吧,那现在我的容器里面。有谁,是不是有两个了,但是当前执行的是谁。
10:00
肯定是占顶的那个。能不能懂当前执行代码肯定是暂停,那个不可能是下面的。它永远执行占顶的那个,好,下面我的坝里面把调用坝的时候会调用谁去,是不是调用负,那我是不是又加了一个。当负二所对应的执行上文产生的时候,B消失没有,有没有,还没有啊,记住了。还没有。因为我是在B,你看到嘛,这个地方我不知道它内部执行嘛,当他执行的过程中,我这个坝的调动结束没有明显没有。有没有看到好。那下面当我的这一个负函数是不是要执行完了,执行完了以后干嘛呢?我们刚才说过了,一个函数执行完会做什么事情,是会释放它的空间,那咋释放呢?
11:02
啊,其实是不是就从有这个键的操作啊,你看从左边的容器变成了右边的这个容器啥意思,是不是把它做一个操作把离除啊。能不能懂,对于一个站的结构来说,永远只能看到站顶的那个元素,你想嘛,你的东西放到下面了,你你上面可拿走,你能看到下面吗?是不是看不见?能不能理解啊,OK,好,那你for执行完以后,后面你的八是不是也会执行完。那执行完了以后呢,是不是也要把它干掉。干了以后是不是剩下它了,也就是说我们通通代码都执行完了以后,我们的容器里面还有谁window。是吧,好,我们占比的数据。
12:00
有可能是不是温嘛,站的底部有没有可能不是window。有没有可能?不可能,为什么不可能?因为第一个产生的是谁window。那我产生起来,我是不是就要存起来呀,我是不要管理起来。能不能理解啊,我要把它管理起来,那这个时候啊,占底肯定是window对不对,那后面我们是不是有可能在它的上面去放一个或者多个呀。对不对啊,至于放几个,得看你是怎么调用呗。是不是啊,这个大家应该把这个结构啊,刚才的这个过程流程给搞清楚。嗯。好,那如果这里面也是一个图,其实这个图影跟这个是一个意思,就是我们用一个用一个容器是不是来存。
13:05
这是个什么呀?全局直行上下文这一个,这上面的都是什么东西,实际上都是肯定是什么函数执行三角,全局执行三角文能有两个吗?不能,只能什么一个,其他的所有都什么函数执行上下文。我的全局执行上为你总是在那个什么底部。这是什么意思?当前运行的总是什么占顶的那个执行3000分对不对,对了吧,那我怎么样运行到这,那运行它了,是要把它所对应的代码执行完了,它执行完了自然是跑到下面来了,但他执行完了以后,师傅就跑到下面来了。
14:09
能不懂啊,这个要搞清楚啊。完了说,能产生这样效果的必须是函数嵌套调用。也就是说,譬如说我有个F1函数。是吧,我的内部又会调用什么呢?F2 f2内部又会叫什么F3。能理解吧,啊OK,这不是递位啊,这样不是递归,F1里面调F f2里面调F3,这样的话我是不是就一共会产生几个,当我去执行F3的时候,整个容器里面有几个四个,好了,我问大家,我现在是这种调用F1里面啊,F1的调用里面会调到F2。啊,还会调用F3。你说我同一个时刻最多有几个?
15:04
睡了。我同一个时刻,在那个容器里面最多有几个执行上下文?五个想啥了?是不是最多最多有四个呀,是吧?现在问题是三个还是四个的问题,到底三个还是四个,能不能是四个,说白了。四个window啊,我说整个容器里面啊,它不有容器存起来了吗?整个站里面对不对,最多最多四个,那能不能是四个,能不能四个不能。为什么说不能你这个F2和F3。要求自行研发。要就执行什么F3,当我执行F2的时候,F3执行没有,没有现在有几个执行F2的时候。
16:00
执行F2的时候有几个三个,那我当我执行F3的时候有几个几个三个不是四个人说老师这不四个吗。就是这个吗?是不是?当我执行F3的时候,有几个三个,三个为什么只有三个,为什么只有三个,是不是这一个已经执行完了呀?我们说一个函数执行完它是不是得移除啊,移除后再去产生这个F3,是不是F3放进去。对不对,怎么样才能产生四个,先由F1 f1里面掉的什么F2 f2里面掉的什么F3,这样才能产生四个。看不看的出来。啊,这个大家应该要区别开来。
17:03
我知道大家不是完全懂啊,但是尽量多懂一点是吧。行,那现在呢,我们就给大家去讲一下那个这这几个概念啊,OK好,我们先休息会,休息一会儿,下节课我们继续往下去说啊。
我来说两句