00:01
好,那么爱格玛script这一块呢,我们基本语法呢,就讲十个知识点,那这十个知识点呢,包含。Let变量包含啊Co常量,包含结构赋值模板,字符串,还有声明对象和定义方法的简写啊,另外呢,还有参数默认值的定义,以及对象拓展运算符的使用,然后另外还有一个大家可能比较熟悉的叫箭头函数,因为这个概念在Java当中有啊,最后呢,有一个比较高级的概念啊,这个会涉及到我们前后端联调了,叫做promise啊,叫承诺。好,我们先来看第一个let变量。那么大家都知道,在传统的javascript当中,我们声明变量的方式呢,是用Y,就是VAR。用这个是不是啊,用there are什么变量,那么light变这个关键字是在。艾克马斯控六当中提出的一个新的关键词,它呢,用来替代这个贝啊。
01:06
那么很显然,既然它是他的替代品,它就比它要高级的多,优秀的多,所以接下来我们要重点说的就是哇,有什么缺陷,以及let它是如何解决这个缺缺陷的,那我们来打开我们的前端的开发工具哈,然后在这个里面呢,我们根据我们之前这个noe pro note pro,我们给它起一个名字吧,比如说叫零一啊,这是我们的,嗯,零一啊。好,我们现在呢,再写一个零。还ES6P吧,总之这个名字大家随便起啊,能区分出你所在的知识点就可以了,好,然后接下来呢,我们再在这个ES6这个目录下面呢,我们再写一个叫零一.gs的这么一个文件,注意这个文件呢是javascript文件。
02:05
let.j那么名字你自己起扩展名一定要叫JS,那接下来呢,我们先来说一下最简单的Java当中的声明变量,我们之前在学习Java斯的时候呢,声明变量的方式就是va a对不对,这就说明了一个变量啊,然后呢,你要给这个变量赋值的话,是不是就是A等于一,好,这就赋值了啊,然后接下来呢,我们打印pencil.log。A,是不是就在控制台上打印出去可以了,那接下来呢,我们来进入到这个控制台啊,可以在这个地方CD。然后零二太键啊,然后回车可以进入到我们当前的这个。目录下。当然你也可以选择。当前的这个目录,然后右键在集成终端打开,这两种方式都可以啊,然后接下来呢,我们就来运行刚刚我们写的这段脚本文件node对吧?啊,然后它的名字呢,叫零一啊,按按tab键好把它的完整的名字给它补全,然后回车,那么大家可以看到这个地方呢,就是打印一了,好,这是一个传统的一个javascript变量的说明的方式啊,那另外呢,除了这样去生明变量之外呢,我们使用Y是不是还可以对这个A进行重复的声明啊,哎,这个可不可以,比如说我又声明了一个A啊,然后呢,我还可以啊,这个叫声明和赋值,分两步进行,这个叫声明和赋值啊,在一句代码当中执行,比如说我这个A呢,叫除这可以不好,我们来试一下。
03:50
大家会发现,那这个时候呢,我打印的A呢,它就是出了啊,所以呢,这个是我通过Y来进行说明,那么light可不可以。
04:02
我们来看一下这个啊。好,我们直接来运行,好大家看,如果我把what改成let的话,那么这个地方直接就报错了。他说dentif a has already been declared,他说呢,这个标识符A已经被定义了,所以你会发现,如果使用let这样的一个关键字的话,它会比原来我们的那个哇关键字更严谨。那么它严谨在哪呢?就是变量不能重复声明。Light。定义的变量不可以重复声明,哇,可以,对不对?好,这是我们说let和Y相比较,相比较来说第一个升级的地方。
05:06
接下来呢,我们再来看啊这个。第二个升级的地方,第二升级的地方呢,就是我先把前面这个给他屏蔽掉。我们再定义一个变量,再定义个变量的话,比如说我在这个地方定义一个袜叫做磁带,呃,我给这个啊,这个司机哈机承车司机,我评星评一星到五星比时候给他评五星啊,这是y star等于,然后接下来呢,我后面这款呢,嗯,我来打印一下pencil点老大把这个五呢,我给它打印出来。好,这个没有什么问题,然后接下来呢,比如说我呢,想写一个嗯判断啊,先写个判断,判断写什么,比如说flag,就是这个我的行程有没有结束,如果行程结束了的话,那我就可以去啊把这个。
06:18
这个五星呢,我给它这个展示出来,如果行程没结束的话,那我这个五星我就不展示好吧,咱们写一个这样的一个逻辑,比如说A。然后接下来呢,我在这个地方呢,输出这个五星对吧?啊,那么很显然这个五能不能输出来呀,是可以输出来的,好那么我们管这个if语句后面的这个大括号叫什么,是不是叫作用欲啊,叫作用欲啊,叫作用欲好那现在呢,我稍微改造一下咱们这个代码怎么改造呢?就是我行程结束之后,我再平行,那也就意味着我要把这个va star5是不是放到作用于里面去写呀,也就是说你行程结束之前就是行程结束啊,你行程是否结束呢?你行程没有结束的时候,你其实是没有机会平行的,当你形成结束了之后,你才有机会平行,所以有的时候呢,我们会将变量的定义挪到作用于里面来定义好。
07:34
那么在if后面的这个大括号当中,我们定义一个作用语,然后在里面呢,是一个start,好,然后接下来呢。我无论行程结束还是没结束,我其实我都想把这个star呢,我给他打印一下。明白这个意思吧,也就是说如果行程没结束,那我可能呢,我也想打印一个没有分嘛,如果行程结束了,那我想打印一个三是一还是五行不行啊,可能是可以的,我们来看一下这样可不可以,那我在这个地方运行一下。
08:09
好,大家看是不是可以的?好,那么对Java比较熟悉的同学可能就会有一个疑问了,那么在我们的Java当中,如果我们在一个作用域内定义了一个变量。那么在这个作用域外是不能够访问的。对吧,但是你会发现在我们的javascript当中就出现了这种情况,在作用域内定义的变量在作用于外,就反问到,所以呢,在业务逻辑当中,它其实某些时候是解释不通的啊,虽然语法上我们说就就这样啊,你就把这语法记住,它没有作用欲。或者说更呃准确的解释呢,它是没有会计定义的。筷子。
09:01
第四个作用,它是没有会计作用语的。啊,我们说这是谁呢?这是Y的特性。好,我们刚才这个呢,是它的第一个特性,然后呢,我们这个呢,就把它作为第二个特性,叫做二,哇没有二啊,好,那谁有呢?很显然蜡有啊,好,那light具备part所用,好我们来把what改成light试一下啊,比如说我把这个袜改成let,我们再来打印。大家看是不是报错了。他说,Star is not。啊,刚刚我们还打印了啊,你一旦把Y改成let了,那么这个块子作用率呢就存在了,否则是不存在的,所以从这一点上来说呢,我们说let会比what更严谨啊,Let会比what更严谨,好,这是我们所说的let和what的第二个区别,那么除了会计作用域之外,还有什么作用域呢?就是函数级别的作用力啊,这个我给大家补充一下,那函数级别的作用力,比如说。
10:24
就是我们定义一个函数啊,比如说方他一,然后在这个地方呢,我先定一个变量的哇。比如说方程里面的函数啊,叫F1啊,方程里面的一个变量F1,比如说等于TEST1。嗯,的变量函数,它随机的变量啊,好,然后接下来呢,我在这里面打印叫做F1,好,这应该是可以成立的,那我怎么调用它呢?我直接找个地方一来调用一下这个就行了,当然我要执行这段代码之前呢,我必须得把上面的这段代码先暂时屏蔽掉,因为上面这段已经不成立了,现在报错了,好然后接下来呢,咱们来运行一下。
11:24
好函数的它一变量,这是可以的,那我们可可不可以在外面对F1进行打印的,我们在这个地方再打印一下is pencil.log。叫做f fe,好,然后接下来呢,我们来看一下,大家看f fe is not DeFine,也就是说你会发现这个地方我们是用Y声明的,但是呢,在这个大括号的外面,我们就不能访问这个f fe了,这个叫什么呀,这叫函数级别的作用语,Javascript的哇,它是存在的,好,它是存在的,但是如果像这种if呀,Else呀,什么while啊,For啊啊这种啊,语句代码块级别的这个作用语啊,那如果这个地方我们用where的话,这个作用语是不存在的啊,这个作用句是不存在,所以这个大家要区分好,我再给大家再总结一下,这块light是具备会计作用率的哇,没有会子作用欲,然后这款。
12:28
是what和light都具备函数级别的作用欲啊,所以这块呢,我们讲的是两个作用域的概念,好。然后接下来呢,我们来说,嗯,Let的最后一个非常关键的特性叫做变量提升,好什么叫变量提升呢?我先把之前的这个代码呢,还是屏蔽掉,我们再来去看一看。
13:04
一个新的例子啊,那首先呢,我在这个地方can.lo。打印一个内容,我要打印什么呢?比如说打印嗯,一个人名吧,就算内容好,那么大家想一想它会打印出什么来。他会打印出什么来,我们来看一下啊,他要打印的内容。啊,当这个下面的这个终端啊,比如说不小心被你关掉了就不存在的时候,我们可以按住键盘上的CTRL加波浪线,波浪线就是一前面的那个字符,CTRL加波浪线,好把这个终端呢,再重新给它打开好,那在这个地方呢,我们再进行一个执行NODE01,好大家看这种情况呢,他报错,他说什么呢?他说username is not DeFined。
14:04
对吧,嗯,叫做这是个错误啊,是不是啊啊就不成立,好然后接下来呢,我们说什么情况下这句话会成立呢?肯定你要先定义,又怎没啊没定义啊,所以呢,在这个地方我们可以好吧,好我先定义,不给它赋初值,会打印一个什么结果呢?我们来执行一下。大家看这个地方呢,打印的是on find,也就是说在javascript当中,如果我们用Y来定一个变量,默认情况下如果不给它任何值的话,那么它就叫unDeFined啊就叫unDeFined,那就是这样的一个情况,那现在我来做一个改变啊,来做一个什么改变呢?就是呢把这个。Username和这个pencillo呀,把这两行给它换一下。啊,我让what you nameme呢?写在这个打印这句话的后面,大家想一想。
15:07
他会打印unDeFined。还会输出这个错误信息,也就是说在第28行的时候,它会向我们第一次执行啊代码输出一个错误信息,还是向我们第二次执行代码输出这个unfi,好,我先保存一下啊。大家看可能跟有些同学的想法是不太一样的,这个地方呢,我们输出的是onfi,然后大家想不对呀,这个定义它是在这个输出语句的后面的呀,我如果没定义的时候,这个输出语句呢,它是那报错对不对,如果我定义了,我起码得在定义到它的前面是不是才可以呀,不定义在后面和之前输出之前没定义有什么区别吗?有啊,在Java斯克当中有那么哇这个关键字,它有一个变量提升的作用,也就是说当你用哇来声明一个变量的时候。
16:17
相当于在整个作用于范围内,把Y写在了第一句,那么在整个作用于范围内,实际上我们这个代码前,因为前面没有有效的代码,就是注释啊,所以呢,相当于你把这个代码呢,写到了整个所有有效代码的第一行。明白吧,啊,也就是说未来你无论在后面你多少行开外,比如说100行开外,我定义了一个Y又三定,那么它也相当于定义了,定义在了这,所以那就也就是说我们这个地方,比如说有很多代码,有很多代码好,那在这些很多代码当中呢,你穿插了比如说哇,Age对吧的定义,又穿插了email的定义,好那么实际上相当于在这个地。
17:02
明白哈,我们可以说它是一个javascript的特性,但是我更愿意把它解释为javascript的一个。一个一个历史遗留的bug吧,啊,因为你这种特性对于我们应用程序来说没有任何意义。没有任何意义,它能够带来的只是让我们的代码更混乱,然后呃,容易出现一些呃,莫名其妙的问题啊,比如说如果你作为一个应用程序的开发者,你没有意识到这个变量一定要全都先定出来,在后面写代码的过程当中,偶尔定义了出来这么一个变量,很有可能你后面的变量就影响到前面的程序了。明白吧,所以呢,这个是javascript从开发到现在啊,它所存在的众多的一个大坑当中的一个啊,我们说为什么Java斯script特他大坑这么多呢?因为当时这个javascript的开发人员啊,他是啊王景那个公司啊,他紧急招聘的一个人,他招聘这个人说给他十天时间,说你给我开发一门脚本语言嵌在浏览器里,然后这个人真的就用十天时间就把开发,就把这个javascript开发出来了。
18:18
就嵌在王晶浏览器当中了,所以可想而知呢,这个代码虽然很强大,但是漏洞也特别多啊,有一些漏洞呢,甚至都延续到了十几年20几年之后的今天,好,所以呢,那如果今天你还在用外的话呢,就会变量,这样就会面临这样的一个变量提升的问题,那怎么解决呢?肯定是用light了哈,好所以呢,接下来呢,我们再来测试一下啊。就是把刚才的这个代码呢,再回顾一下,我们这个代码执行结果是什么呀,是不是on呀。对吧?On find,好,我们把它变成light,然后我再执行,是不是就又报错了?这个其实才是咱们真正想要的结果。
19:02
对不对,虽然前面执行这个没报错,后面这个执行报错了,但是报错这个才是咱们真正想要的结果,因为这种语法才能够让我们的应用程序更严谨,不至于你后面定义的某些内容影响到了前面的代码明白哈,好,所以这个呢,是我们let的第三个非常重要的功能,叫做变量提升。
我来说两句