00:01
嗯,下面我们看关于执行上完三完站的一个观点。啊,这里面有段代码,他问的是一次输出什么啊,再问的是整个过程中产生了几个上执行上下文,我们先来看看一下这个代码。啊,前面没什么输出是吧,接着这个地方过了一个I等于一接着我去调用这一个货,可以调吧,可位可以吧,你这不生命提升吗。是不是函数生命力升了,它最后呢,打了一个打印一个N。这个I是多少?等于什么fine是吧?啊这个没什么问题是吧?好,我调用这个货传进来是几一,它这里面的意思就是如果I等于几了是了,就是不是退出。
01:02
是吧,接着打印一下啊,这个这个线是几一。好,关键问题来了。比较奇怪的事情,我这个里面调谁去。叫谁?是不是调用我当前这个函数。是吧,是好了,这一个这种调用我们称它为什么呢?啊,先把这些都去掉啊,啊OK,这种调用我们称它为递归调用,何谓递归调用很简单,在在自己的,在函数内部调用自己,好,我问大家,如果我没有这句话。
02:02
那。会怎么样?这是不是会成为一个死循环呢?能不能懂,因为我们就没办法出去嘛。能不能看出来,但是递归一般都会有一个什么退出终止的一个条件,我我上面是个条件呢,你想看我的I是不断在增加呀,我传的这个值对不对,K是一再掉就变成什么了啊,再掉了三,我是不是掉了几次就会退出啊,是不是好现在。我们就要问一下大家一次都输出什么呢?关键前面这个最后两个没问题是吧,OK,前面这个是什么,按DeFine,我前面我就不管它,就是这个用就激励吧,写的太多了,有点受不了。
03:06
啊,第一个输出是激励啊安的没什么问题吧,没问题好最后输出什么。啊,就要G好吧,基这是基什么看关键是这个值是多少,应该这个值。7C还是还是四一是吧,嗯,行,你们说一我没说啊。一说说,一听这句话就感觉不太靠谱了,是不是你要相信自己?好了,下面一个。你知道那个老师最大的快乐是什么?对调戏学生好?
04:07
来下面继续往下看啊,继续往下看,那接着我们这个地方应该输出的假设,我我这个叫FB啊,这个叫FN,因为这样的话能够说的清楚一点好。接着第二个数是什么?是不是FB呀,你看嘛,你这不调用它吗?这不进来嘛,是不是进来的时候是不是先输出它,输出它应该什么FBG1好,问题来了。后面数是什么?请告诉我。是。不过有的同学都蒙圈了,不知道怎么搞了。
05:07
大家想啊好,他开始是不是传了个一技能输出f be1,这个没问题,是不是接着是不是又回去执行了传单是几啊,传单是二的话,大家看这个地方又会执行它吧,那输出什么FB啊,FB2输出以后我能不能输出F1,不能现在干嘛,是不是传传体进去了,传几现在传急我是不是又调动负呀,又调动负号传起三穿三的话,我这个地方怎么回事,那是不是又会输出什么FB什么三对不对。好接着呢,接着我是不是三以后,我是不是传四进去,传四进去的话就怎么着了呀,是不是就结束了,好,这个结束是不是最后掉的一个函数结束了,那前面函数结束了吗?有没有没有,那请问。
06:22
下面输出什么呢?是不是还有我函数执行完以后,是不是下面执行,是不是我每调用一次,每调用我这个货,只要没有退出,是不是都会去执行,这个只是执行的时机,那我问大家啊,下面你说我的肯定是F1,关键是F一级。啊,OK,这里面应该会有啊123。是不是都有?是吗?
07:00
应该是什么321。为什么是321,大家想啊,这是个嵌套调用,地归调用,它其实也是嵌套调用。是不是大家想啊,看到什么意思,你看那个上看那个那个就是那个执行上下文章首先是谁,是不是window。对不对,接着产生了什么,是不是我去调用货呀。就把它看成F好吧F,而且它传的值是几乙?接着在F1里面,在这个F1里面调用时,它是不是输出了FB1啊,接着它又会掉水去F2。是吧,F2里面大家看啊,F二传的是几啊,不传F还是F传的是是吧,传的是接着呢,传的什么F3,但是再传的话啊,我们后面来了一个F什么。
08:08
是不是,但是他有输出吗?这一次有没有输出没有打开啊,那也就是说整个过程中产生了几个。对。几个,这很明显嘛。能不能看出来,能吧,这不一共五个嘛,好,我执行F1调用F2之前,我有没有输出,有没有什么输出F1。在我F传入一执行的时候,后面不调用了F传入二嘛,是吧,我有没有输出你看嘛,你这个地方是先输出再去调用下一次的有没有有开始是不是输出FB1对吧,接着我是不是调用F传到二呀,输出什么FB啊,接着输出,接着执行它输出什么FB3,接着它是不是结束了,它结束了是不是要把F3它的它接着执行它吧。
09:16
能不能看懂,你执行完它以后,它结束了,是不是要执行这个F3,那执行F3下面的代码的时候要输出什么,是不是F13呐,对不对,好,F13输出完以后,当前这次调用是不是就结束了,那结束了执行谁去。是不是因它一旦结束是不是要移除啊,能不能懂接着数是什么,F12接着呢。F111。对不对,那也就是说输出的顺序是这么一个顺序。
10:03
是吧,嗯。你看的这个也并不简单啊。你要能说清楚也不太容易,好,我们来看一下,也不知道是不是这个东西。我们来看一下呗,看到。先是GB安了是吧,接着是FB1FB2FB3,接着什么F13F12F1,最后是不是一啊。对吧,嗯,对的,没问题,跟我们刚才的推测是一样的。嗯。那整个过程中产生了几个自行向循环,刚才说的几个,这么快就忘了是五个呀。不是1234有四个了嘛,再加一个window不五个嘛,是吧?嗯,这个大家需要去给他搞清楚。
11:04
这也相当于是个面试题了。好,下面我们来看另外一个,这个里面有几道题,这个题呢都都是不太好整的。先看第一个哪一个A定义了一个函数,又握了一个a type a,请问。是什么?他无非要不然的话就按你放的,要不然的话就放心。就这两种可能性是不是,那到底是那个呢,还是发起呢。那其实这里面涉及到变量提升和什么函数提升,这个地方就是谁先提升谁后提升对不对,谁先提升呢?函数,那要函数先提升的话,那那么后面就再执行变量提升呗。
12:07
是吗?谁先执行?你别说优先,我就问大家谁先执行谁先,也就是说先执行函数提升,还先执行变量提升对吧,它执行的时候是不是有个肯定有个先后顺序吧,对不对啊,有变量提升和函数提升,那先执行哪一个呢?好,有人说老师我们试一试啊,假设先执行函数间,是不是A就有值了是吧,那就是在执行什么。那你先执行函数,那后面执行变量形式么。是吗?是这意思吧?啊,又不知道了,又。
13:01
这里面其实上是先执行啊,变量提升。在执行什么呢?函数提升它就这么一个套路啊,那你想想看,我们这个地方,我们这里面最终的值是多少多少,说白了就是最终A的值是安方的,还是那个函数。方是不是方形啊,所以我们最终输出什么是不是方,写这样一个串法是不是好,我先先先不看了啊,我们看下一个这个不太好办啊,看了啊,它这个套的就有点让人受不了,他说if啊,非括号b in window这个音什么意思,也就说我的这个B这个属性在window里有没有。
14:04
至于他的值是什么,没关系。有不懂,你有没有这个属性。好,下面握了一个B,握里面握了一个B等于一,最后打印输出B,啊,B是多少呢?B是一。那BC1就说明他执行过。要。那是案例,就说明他没执行过。也就是说这个是还是过是什么,那他能进来吗?不能不能进来的话,那他也。安是吗?看着大家的眼神啊,大家说我就先选择安啊,我没说这些都对的啊,我就写一个,好,最后一个。
15:04
握了一个C等于一,接着定义了一个函数C,啊,这里面有一个形参C。你说呢,这还不如挂了,不挂可以,但是我们定义的券不要这么做啊,这都是用来难为人的,哪有这么写的?好,接着输出这个C,接着C去调用传入二接。接啊对吧,有人说你想就不对,为什么?因为这个就是太明显了,感觉就就不是一个不就不是一个测一个面试题是吧,你这是反向推理。啊,其实那个题后面他他他是他是怕你问一下,他后面又搞了一个。这种题也就这种代码,也就出现在那个面试题里面,你真正要是项目里面写这种代码,让让项目,让项目经理看到你直接就劈头盖脸你的批了啊,我把这个去了,因为跟这个没关系,我就简化一点。
16:28
是数是吗?啊,还有人报错的。有报错的吗?有报错。啊,现在出现一个报错的。暴吐。有还有出现错的吗?笑,好,我们来看一下,我看一下啊。
17:03
首先第一个呢是风险,第二个是什么案例犯呢,是没进去啊就会报错,报错的原因是什么?他说C1直落风险,C不是一个什么函数原因拉,能不能这是C不是函数对不。C是函数吗?不是,这个题是出的相当好的。啊。首先,存在变量提升和函数提升。那刚才我还反复跟他说过,我为了做这题,我还反复跟他强调,这个代码实际上提前就执行好了。提升的时候是不是早执行过了?对不对,实际上的代码应该怎么做呢?是这样的。落了一个C,搞了一个风险C等于一。
18:02
你觉得C还能调用,函数还能调用,括号能调吗?C4函数啊。是还是不是明显不是嘛,你说老师你就应该这么写,这么写我就看得懂。啊,这个题还是出的不错的,很有隐蔽性,就是题你要出的很明显,那别人一眼就看出来了,这个题出的比较隐蔽啊。只要你不注意,你就看到这里有个方形,这里有个C。而且吧,那真正提示在后面写个这个,那你就疯狂的想一下里面内容,他是为了你把你的注意力。让你让你把所有的关注点都迁移到这个里面来,你就想想一想就忘了,这个C等于一这个这个负值了。跟这个有跟里面东西有关系吗。有没有关系,没有,这没机会执行那里面的代码。
19:05
啊,他故意在这里面写了很多C,就算你把关注点就是设计人也是费了心思,我跟你说。啊,它会让你的关注点一直集中在这一片,最后就忘了那个C等于一这样一个负值了。啊,这个是报错是吧。好,现在呢,我们就跟大家去讲了这样的三个,这个里面呢,其实主要是涉及到变量提升,函数提升啊这样一些东西,嗯。你说难吧,还是有点小难度,其实你要搞清楚了也并不难啊。
我来说两句