00:00
杰森,我们已经说完了,接下来我们再说一下这个变量的问题。我们之前在使用这个变量的时候,我们说你在这儿声明了一个变量,在这个地方,你要使用这个变量会出现问题的,为什么它访问不到?所以呢,我们把这个变量给它放在了外面,提升了它的作用欲,我们当时是这么做的,但是我们告诉你,我们的作用欲可以用另外一种方式实现。那它为什么可以用别的方式实现呢?主要取决于我们变量的类型,我们的变量有两种,一种叫全局变量,一种叫局部变量,我们要说一下。把文档打开,打开之后把里面之前讲的内容全部删掉好。接下来我们就说一下变量的作用域,那么首先我们function,然后我写个test,写完以后在这个里面我们来写上一个变量VR,然后呢,我们叫username,它等于张三好了,写完之后,接下来我们执行这个方法,然后alert叫username。
01:15
同学们想一想,现在我们alert会出现一个什么样的情况?是报错呢,还是说把张三打印出来了,还是说打印出一个安地范的呀,我们一块儿来看一看。那来我们现在把这个关掉,把这个咱们打开。打开以后,待会发现什么都没出来,对吗?好,我点击检查,我来看一看控制台都发生了什么事情,点你会发现他说了叫username is not DeFined,什么意思?报错,你没声明这个变量,你就使用这个变量是不行的,在我们的javascript当中,一个变量你从来就没有声明过,你上来就用是不允许的。
02:07
所以说我们这个变量就称之为叫局部变量。那么我们简单的来这么说吧,嗯。JS中使用VAR声明的变量。它就是我们叫局部变量。所以这个声明的变量只能在他最近的大括号里面使用是有效的,你在大括号的外面享用,根本就用不了。那什么是全局变量呢?它的作用域是不是比它大呢?我们来试一试,我们告诉你,全局变量非常的简单。所以啊,我们写上在GS中。他不使用VR声明的变量。
03:02
它就是全局变量。哎,老师这什么意思,什么,你加上这个VR就是局部变量,你不加就是全局变量,这是为什么?来我们试一试,先看效果,你把这个VR我去掉。我去掉以后你刷新。你看行不行?张三出来了吧,那是不是说明我们在方法的内部的一个变量,我在外部能够使用,这不就是全局的概念吗?我哪都能用,诶,那这是为什么呢?难道我们的JS语法就是这么规定的吗?告诉你不是。那为什么我们这么写没错呢?来,我问问同学们,我现在写个name,我问问同学们会出现什么情况?我们刚才讲过了,你当使用一个变量的时候,你来都没有声明过,是不是就报错啊,好,我现在咱们试一试,因为这个name属性我们从来就没有声明过,你看前面哪有啊,根本就没有,好我刷新刷新以后,你看它报错了吗?他没报错,他弹出了我们的消息,只不过消息是空的。
04:19
那就意味着这个是对的,那可是有问题啊,我从来就没有声明过他为什么可以使用呢?我们来给大家解释一下,在解释之前我就问问同学们,这个alert方法你声明过吗?你是不是也没声明过,但你上来就可以直接用,那这是为什么呢?你可能会说了,老师呀,这是一个我们JS当中的内置方法,我可以直接使用,我告诉你不是。这个alert方法不是内置方法,内置的方法是什么呀?这个方法是内置的,叫pass in。这个方法是它的内置方法,所以这个alert并不是,可是它并不是它的内置方法,为什么我们可以直接来用呢?那是因为我们省略了一个对象叫window。
05:09
也就意味着我们的alert方法其实是一个窗口对象的方法来我们刷新。啊,你会发现没有任何的问题,那么其实我告诉你不光是这个方法,还有很多的方法其实都省略了window。还有一个大家可能会比较常见,我们要想获取页面元素的话,我们一般会怎么写,叫document.get by ID,对吗?我们会这么写吧,对不对?我就告诉你,这么写其实也不是很准确,为什么依然省略了一个window对象,也就意味着我正确的写法其实是这样的,叫window点点,Get element BYD,我应该是这么来写的。但可是呢,由于我们的代码都是在当前的窗口当中,所以当前的窗口对象是可以省略的,它能省略,所以我们才能够这么去使用它。诶,这就是一个我们的window对象的问题,同样道理,我们这个name,记住,你从来没有声明过,但是告诉你window里面就有这个属性,所以我们为什么他没报错,因为它等同于怎么写呢?叫window DR name。
06:25
哎,就是这个意思,所以他根本就不会报错,因为它取的是窗口的名称。那我刚才这个地方,为什么你不用VR就能声明就能使用,为什么?就是因为你声明这样的一个变量,它等同于什么?它等同于给点user。那所以你这边写上叫username,它其实等同于叫window.una所以那就没问题了,这就是所谓的叫全局变量,因为window对象是全局的,你给它增加一个属性,增加一个变量,它不就是全局的吗?
我来说两句