00:00
大家刚刚说的是不是提升啊,我们看一下提升到底到底什么叫提升啊。稍微插个一嘴啊来提升。之前是不是已经讲过提升了?好,诶。提升。好。我们说画一个A等于二是不是好,如果你在上面去o.log一下这个A。好,应该是什么,就看一下是不是为on。你放下是不是啊?好,如果你压根都没有定义过这个A应该干嘛?F10道是不是来一个报错啊,他说A一直都是DeFine嘛,好来说一下这个事情,好,其实这个时候大家看是不是变量的提升啊,是不是变量提到上面去啊,然后干嘛A等于二是不是这样的操作啊,好,这没有任何问题,那为什么为什么上来我们在这边c.log a的时候。
01:07
那为什么在这边CTRl.log a的时候,他会给你报一个错呢?好,这个叫。右查询什么叫右查询,在等号的非左侧就叫右查询,来看这个时候如果什么,如果你问你,你现在这边是不是要去Co素点漏个A啊,需不要对这个A去做一个查找啊,好,他在整个作用里面找找找找找,如果没有发现你声明过怎么办?没有发现你挖过他就直接给你报错,能明白吗?好,可是大家看,呃,我把这个弹幕写好,怎么写呢?嗯。想想啊,嗯。我挖一个A等于。二嗯,不对,画一个A。嗯,这是等号的右侧吧,是不是?嗯,想想怎么做啊,嗯,我来去前面找两个DEMO啊,好,这个DEMO还不是很好写,好,我来找两个DEMO。
02:15
好,左查询跟右查询好。嗯,怎么写,我看一下啊。嗯,好啊,我们来看一下。来一个方形叫。Test好,里面B等于A,好点log一下这个。CR.log一下这个B好看一下,好,如果我在外面,大家看我画一个A等于八是不是啊,好,告诉你这个B,我问你这个B有没有声明过。这个B有没有声明过,一个没有声明过,大家看如果你从来都没有声明过,我去直接点look一下这个B的话,会不会报错,会会给你报个什么错吧。
03:06
这边是不是给你过定什么,就b is not find是不是好再来看,如果大家看在这个函数内部问你这个B有没有声明过,有没声明过,没有声明过吧,没有声明过是不是我需要对这个逼干嘛去做做一次输出啊好,这个时候看他看他会报错。这里的讲义要不要我说?好看有没有错,刷一下有有报错吗?没有吧,是不是什么东西都没有一下。抗收点log一下,这个B不是应该等于八吗?好,Test函数没有调用啊,只有你好放到这边来调用一下,只有你好看一下。哎,是不是输出八了,是不是一样的,都是没有声明过的,可是两种情况一样吗。不一样,好这种叫什么查询,上面这种叫做,上面这种叫做左查询,好,下面这种叫做。
04:02
右查询好左查询跟右查询它有什么区别?好左查询什么叫左查询对。等号左侧的。变量进行查询,就叫做左查询,你看你在这边是不是要去c.logo这个B啊,这个B是不是在等号的。左侧的其实我问你,你在,嗯,来看一下。好,你在这一块问你是不是要把A的一个值赋值给B啊,是不是在这一块要不要对A变量进行查询。要不要对B变量进行查询啊,都是需要的吧,这边的时候对这个B变量进行查询的时候,你是不是要把A的值给B啊,能明白吗?所以说这时候其实他做了两次查询,假引擎内部做了两次查询,第一次是对A变量进行查询,第二次是对B变量进行查询,对A变量使用的是。
05:01
右查询对B变量使用的是左查询,两种机制,它有什么不一样呢?如果是右查询,它会随着作用域链,大家知道什么是作用列吗?那这个时候是不是一层作用啊?外部是不是又又一层作用啊?好,如果对什么。右边的这个变量去进行查询,它会沿着作用域链去找。如果能找到。如果能找到就把这个值付给他,如果找不到他就会啊。报错能不能理解好,那这个时候是不是A可以找到,而且这个值是八啊,那是不是要把这个八要付给B了,那要不要找一下这个B在哪。是不是啊,你得找一下B在哪边才能才能把这个八给他吧,能理解吗?好,这个时候对它去进行一次。左查询左查询跟右右查询的逻辑一样,也是沿着作用1.1层一层的往上找,发现你最终有吗?没有,没有的时候,JS引擎会自动在全局中给你去挖一个币。
06:04
能明白吗?这其实他在全局已经给你去挖了一个币了,懂不懂好,只不过如果是右查询的话,全局他有币吗?有吗?没有,比如说我这样想,但是这个时候我在外部问你,我能不能告诉你漏这个病。我能不能抗点露一下这个表?这个有没有值?来看是不是应该有是有值的,你看888是不是来看一下,如果把这个Y写到这里面,那这个时候如果我在c.log个A。有没有?肯定有值嘛,你定义在全局了吗?如果我把这个东西定义在了里面,问你c.log b有没有值?有没有值啊,是多少?Log a有没有值啊,有没有值啊,没有,我看一下点log b是不是八八,你看a is not方对吧,能不能理解啊,好,这是为什么,你想啊,对这个A变量进行一次什么查询啊。
07:07
右查询当前作余里面有没有找到,找到就不找了,知不懂对B进行进行进行一次什么查询,左查询当前作余里面有没有全局作业里面有没有JS已经在全局会给你去自动创一个,所以说你才能才能在这边去CTRL个log个这个B能明白吗?好,如果没有JJS以前这一步的话,问题全局可能会有个B吗?不可能吧,能不能解看看,如果我这个变量啊,如果这个里面压根就没定义过,好我这个都不要。我压根都没有定义过,好问你这个时候会不会报错?会不?看一下A错误出在第几行?16行找一下16行是不是错误出在这一行,为什么错误出在这一行?你执行到第16行的时候,要不要对A变量去进行一次查询什么查询又查询当前作用有吗?全局作用有没有,怎么办?
08:12
报错。等号等号这边跟这边逻辑一样吗。一样吗?不一样,一次是如果你整个作用里面都没有找到报错,另外一个呢,如果你整个作用里面都没有他给你干嘛直接在全局挂一个能明白吗?这就是左查询跟右查询不一样的地方,能明白,你说你如果在一个函数里面,你不用去划进一个变量的话,最终会不会冒到全局去啊?会不会冒到全球去啊,会的能明白吗?OK,问你那第17行抗点落这个B的时候,问你对B区进行一次什么查询。是什么察觉,这叫等号的非左侧好,这个时候B是不是在等号的非左侧好,这个时候对它进行一次右查询。
09:07
能明白吗?分清楚左查询跟右查询懂不懂,好,那之后的话,你们还会涉及到GS内部去实现了很多很多的原理,懂不懂,这才是第一个啊,什么是左查询,什么是右查询啊,OK,那稍微的给大家去提一嘴啊,稍微的去先把这些东西先带一带啊,不要你现在如果你现在听不懂,没关系,不要掌握的太深,懂吗?好之后会给你们详详细的一个个去讲啊,好,那只不过我们在这边已经什么用到了这一块,你在这边你这个哇,你能。不写吗?你要是不写的话,这个B标签是不是自动冒到全局去了,这个时候你再对这个B标签里面去操作,它的一表能不能操作到,是可以操作到的,懂不懂就说你要百分百的把它封装在一个函数中里面,好这个可不可以理解啊,OK,好,这个视频听一下。
我来说两句