前言:今天我把变量这块内容单独放出来,是我觉的这也是个重点,我很早就知道变量这个东东,可惜一直半懂不懂的,每次出现复杂的写法我就蒙圈了,今天我利用的好长时间把这块内容弄明白。
初学者可以看看我下面的案例和详细解释,你们一定会恍然大悟,我今天就是这样的感觉。虽然每天进度很慢,但是每天都有收获,这就是积累成多。
现在感觉每天的时间不够用,时间过的超快。今天过的都不知道是星期几了。
声明全局变量
1.最外层执行环境下声明的变量是全局变量
2.不用var声明的变量是全局变量
全局变量特点:任何作用域下都可以访问变量中的值。
<script> text=5 //全局变量 var b=a //全局变量 function a(){ a=3 //全局变量 } </script>
声明局部变量
1、函数中声明的变量是局部变量
2、函数中的形参是局部变量
局部变量特定:函数执行后,函数生命周期结束。所以函数中的局部变量都会被系统删除,所以局部变量在函数外是访问不到的,除非使用return
<script> vara=123 //局部变量 </script>
全局、局部变量案例分析
function show(){ var a=b=c=10; } show() console.log(b,c); console.log(a); //结果是a报错,b,c=10 //看到这个案例的同学注意以上说的全局变量的特点
详细解释:因为a是使用var声明的是局部变量,函数外访问不到,而且函数外面也没有声明a,所以报错。而b,c 没用var声明,是全局变量,所以函数外可以访问到。
var a = 10; function test(){ a = 100; alert(a); alert(this.a); var a; alert(a) } test() //结果 100 10 100
详细解释:js在执行前会对整本文件的声明部分做完整分析,从而确定变量的作用域,所以在函数test执行前。 1、由于第6行声明了局部变量,所以函数内部的a都指向已经声明的局部变量,所以第4行输出100. 2、第5行输出this.a,我们都知道函数内部的this指针指向的是函数的调用者,在这里函数test被全局对象调用,所以this指向全局对象window,所以this.a=window.a,一开始生命了全局变量a=10,所以第5行结果为10. 3、第七行输出结果为100,因为局部变量a在第3行已经被赋值了100,所以直接输出局部变量a的值。
var a = 100; function test(){ console.log(a); var a= 10; console.log(a); } text()//undefinde 10
详细解释
1、在这个函数中,执行第3行前,可以认为已经声明了变量a,但是并没有定义(这里说的赋值),所以第3行结果是空
2、执行第4行a=10后,变量a的值为10.所以第5行输出结果是10.
var a =100; function test(){ alert(a) a=10 alert(a) } test(); alert(a) //100 10 10
详细解释
1、我们都知道在函数内部,一般用var声明的为局部变量,没用var声明的一般为全局变量
2、在text函数内,a=10声明了一个全局变量,所以第3行的a应该输出全局变量的值,而在函数执行之前已经声明过一个全局变量并赋值100,所以这里第3行输出100
3、第四行给全局变量a重新赋值10,所以全局变量a的值变成10,所以第五行输出10.
4、而在函数test外部,第8行输出全局变量的值,因为全局变量被重新赋值为10,所以结果是10.