首页 > 代码库 > js基础第一天 (全局变量,局部变量)

js基础第一天 (全局变量,局部变量)

前言:今天我把变量这块内容单独放出来,是我觉的这也是个重点,我很早就知道变量这个东东,可惜一直半懂不懂的,每次出现复杂的写法我就蒙圈了,今天我利用的好长时间把这块内容弄明白。
初学者可以看看我下面的案例和详细解释,你们一定会恍然大悟,我今天就是这样的感觉。虽然每天进度很慢,但是每天都有收获,这就是积累成多。
现在感觉每天的时间不够用,时间过的超快。今天过的都不知道是星期几了。
 
声明全局变量
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.

 

 

js基础第一天 (全局变量,局部变量)